@@ -57,11 +57,10 @@ func pickSignatureAlgorithm(pubkey crypto.PublicKey, peerSigAlgs, ourSigAlgs []S
5757 if ! isSupportedSignatureAlgorithm (sigAlg , ourSigAlgs ) {
5858 continue
5959 }
60- hashAlg , err := hashFromSignatureScheme (sigAlg )
60+ sigType , hashAlg , err := typeAndHashFromSignatureScheme (sigAlg )
6161 if err != nil {
62- panic ("tls: supported signature algorithm has an unknown hash function" )
62+ return 0 , 0 , 0 , fmt . Errorf ("tls: internal error: %v" , err )
6363 }
64- sigType := signatureFromSignatureScheme (sigAlg )
6564 switch pubkey .(type ) {
6665 case * rsa.PublicKey :
6766 if sigType == signaturePKCS1v15 || sigType == signatureRSAPSS {
@@ -89,45 +88,45 @@ func verifyHandshakeSignature(sigType uint8, pubkey crypto.PublicKey, hashFunc c
8988 case signatureECDSA :
9089 pubKey , ok := pubkey .(* ecdsa.PublicKey )
9190 if ! ok {
92- return errors . New ( "tls: ECDSA signing requires a ECDSA public key" )
91+ return fmt . Errorf ( "expected an ECDSA public key, got %T" , pubkey )
9392 }
9493 ecdsaSig := new (ecdsaSignature )
9594 if _ , err := asn1 .Unmarshal (sig , ecdsaSig ); err != nil {
9695 return err
9796 }
9897 if ecdsaSig .R .Sign () <= 0 || ecdsaSig .S .Sign () <= 0 {
99- return errors .New ("tls: ECDSA signature contained zero or negative values" )
98+ return errors .New ("ECDSA signature contained zero or negative values" )
10099 }
101100 if ! ecdsa .Verify (pubKey , signed , ecdsaSig .R , ecdsaSig .S ) {
102- return errors .New ("tls: ECDSA verification failure" )
101+ return errors .New ("ECDSA verification failure" )
103102 }
104103 case signatureEd25519 :
105104 pubKey , ok := pubkey .(ed25519.PublicKey )
106105 if ! ok {
107- return errors . New ( "tls: Ed25519 signing requires a Ed25519 public key" )
106+ return fmt . Errorf ( "expected an Ed25519 public key, got %T" , pubkey )
108107 }
109108 if ! ed25519 .Verify (pubKey , signed , sig ) {
110- return errors .New ("tls: Ed25519 verification failure" )
109+ return errors .New ("Ed25519 verification failure" )
111110 }
112111 case signaturePKCS1v15 :
113112 pubKey , ok := pubkey .(* rsa.PublicKey )
114113 if ! ok {
115- return errors . New ( "tls: RSA signing requires a RSA public key" )
114+ return fmt . Errorf ( "expected an RSA public key, got %T" , pubkey )
116115 }
117116 if err := rsa .VerifyPKCS1v15 (pubKey , hashFunc , signed , sig ); err != nil {
118117 return err
119118 }
120119 case signatureRSAPSS :
121120 pubKey , ok := pubkey .(* rsa.PublicKey )
122121 if ! ok {
123- return errors . New ( "tls: RSA signing requires a RSA public key" )
122+ return fmt . Errorf ( "expected an RSA public key, got %T" , pubkey )
124123 }
125124 signOpts := & rsa.PSSOptions {SaltLength : rsa .PSSSaltLengthEqualsHash }
126125 if err := rsa .VerifyPSS (pubKey , hashFunc , signed , sig , signOpts ); err != nil {
127126 return err
128127 }
129128 default :
130- return errors .New ("tls : unknown signature algorithm " )
129+ return errors .New ("internal error : unknown signature type " )
131130 }
132131 return nil
133132}
0 commit comments