rsa.go
func NewRSASigner(alg Algorithm, method RSASignerVerifier) func(Store, crypto.Hash) (Signer, error) {
	return func(store Store, hash crypto.Hash) (Signer, error) {
		var ok bool
		var privRaw, pubRaw interface{}
		var priv *rsa.PrivateKey
		var pub *rsa.PublicKey

		// check private key
		if privRaw, ok = store.PrivateKey(); ok {
			if priv, ok = privRaw.(*rsa.PrivateKey); !ok {
				return nil, ErrInvalidPrivateKey
			}

			// check private key length
			if priv.N.BitLen() < RSAMinimumBitLen {
				return nil, ErrInvalidPrivateKeySize
			}
		}

		// check public key
		if pubRaw, ok = store.PublicKey(); ok {
			if pub, ok = pubRaw.(*rsa.PublicKey); !ok {
				return nil, ErrInvalidPublicKey
			}

			// check public key length
			if pub.N.BitLen() < RSAMinimumBitLen {
				return nil, ErrInvalidPublicKeySize
			}
		}

		// check that either a private or public key has been provided
		if priv == nil && pub == nil {
			return nil, ErrMissingPrivateOrPublicKey
		}

		return &RSASigner{
			alg:    alg,
			method: method,
			hash:   hash,
			priv:   priv,
			pub:    pub,
		}, nil
	}
}
func NewRSASigner(alg Algorithm, method RSASignerVerifier) func(Store, crypto.Hash) (Signer, error) {
	return func(store Store, hash crypto.Hash) (Signer, error) {
		var ok bool
		var privRaw, pubRaw interface{}
		var priv *rsa.PrivateKey
		var pub *rsa.PublicKey

		// check private key
		if privRaw, ok = store.PrivateKey(); ok {
			if priv, ok = privRaw.(*rsa.PrivateKey); !ok {
				return nil, ErrInvalidPrivateKey
			}

			// check private key length
			if priv.N.BitLen() < RSAMinimumBitLen {
				return nil, ErrInvalidPrivateKeySize
			}
		}

		// check public key
		if pubRaw, ok = store.PublicKey(); ok {
			if pub, ok = pubRaw.(*rsa.PublicKey); !ok {
				return nil, ErrInvalidPublicKey
			}

			// check public key length
			if pub.N.BitLen() < RSAMinimumBitLen {
				return nil, ErrInvalidPublicKeySize
			}
		}

		// check that either a private or public key has been provided
		if priv == nil && pub == nil {
			return nil, ErrMissingPrivateOrPublicKey
		}

		return &RSASigner{
			alg:    alg,
			method: method,
			hash:   hash,
			priv:   priv,
			pub:    pub,
		}, nil
	}
}
func NewRSASigner ( alg Algorithm , method RSASignerVerifier ) func ( Store , crypto . Hash ) ( Signer , error ) { return func ( store Store , hash crypto . Hash ) ( Signer , error ) { var ok bool var privRaw , pubRaw interface { } var priv * rsa . PrivateKey var pub * rsa . PublicKey // check private key if privRaw , ok = store . PrivateKey ( ) ; ok { if priv , ok = privRaw . ( * rsa . PrivateKey ) ; ! ok { return nil , ErrInvalidPrivateKey } // check private key length if priv . N . BitLen ( ) < RSAMinimumBitLen { return nil , ErrInvalidPrivateKeySize } } // check public key if pubRaw , ok = store . PublicKey ( ) ; ok { if pub , ok = pubRaw . ( * rsa . PublicKey ) ; ! ok { return nil , ErrInvalidPublicKey } // check public key length if pub . N . BitLen ( ) < RSAMinimumBitLen { return nil , ErrInvalidPublicKeySize } } // check that either a private or public key has been provided if priv == nil && pub == nil { return nil , ErrMissingPrivateOrPublicKey } return & RSASigner { alg : alg , method : method , hash : hash , priv : priv , pub : pub , } , nil } }
// NewRSASigner creates an RSA Signer for the specified Algorithm and provided
// low level RSA implementation.
NewRSASigner creates an RSA Signer for the specified Algorithm and provided low level RSA implementation .