crypto-pubkey-0.2.8: Public Key cryptography

LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilityexperimental
PortabilityGood
Safe HaskellNone
LanguageHaskell98

Crypto.PubKey.RSA

Contents

Description

 
Synopsis

Documentation

data Error Source #

error possible during encryption, decryption or signing.

Constructors

MessageSizeIncorrect

the message to decrypt is not of the correct size (need to be == private_size)

MessageTooLong

the message to encrypt is too long

MessageNotRecognized

the message decrypted doesn't have a PKCS15 structure (0 2 .. 0 msg)

SignatureTooLong

the message's digest is too long

InvalidParameters

some parameters lead to breaking assumptions.

Instances
Eq Error Source # 
Instance details

Defined in Crypto.PubKey.RSA.Types

Methods

(==) :: Error -> Error -> Bool #

(/=) :: Error -> Error -> Bool #

Show Error Source # 
Instance details

Defined in Crypto.PubKey.RSA.Types

Methods

showsPrec :: Int -> Error -> ShowS #

show :: Error -> String #

showList :: [Error] -> ShowS #

data PublicKey #

Represent a RSA public key

Constructors

PublicKey 

Fields

Instances
Eq PublicKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

Data PublicKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PublicKey -> c PublicKey #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c PublicKey #

toConstr :: PublicKey -> Constr #

dataTypeOf :: PublicKey -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c PublicKey) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c PublicKey) #

gmapT :: (forall b. Data b => b -> b) -> PublicKey -> PublicKey #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> PublicKey -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> PublicKey -> r #

gmapQ :: (forall d. Data d => d -> u) -> PublicKey -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> PublicKey -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> PublicKey -> m PublicKey #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> PublicKey -> m PublicKey #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> PublicKey -> m PublicKey #

Read PublicKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

Show PublicKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

ASN1Object PublicKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

Methods

toASN1 :: PublicKey -> ASN1S

fromASN1 :: [ASN1] -> Either String (PublicKey, [ASN1])

data PrivateKey #

Represent a RSA private key.

Only the pub, d fields are mandatory to fill.

p, q, dP, dQ, qinv are by-product during RSA generation, but are useful to record here to speed up massively the decrypt and sign operation.

implementations can leave optional fields to 0.

Constructors

PrivateKey 

Fields

Instances
Eq PrivateKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

Data PrivateKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PrivateKey -> c PrivateKey #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c PrivateKey #

toConstr :: PrivateKey -> Constr #

dataTypeOf :: PrivateKey -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c PrivateKey) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c PrivateKey) #

gmapT :: (forall b. Data b => b -> b) -> PrivateKey -> PrivateKey #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> PrivateKey -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> PrivateKey -> r #

gmapQ :: (forall d. Data d => d -> u) -> PrivateKey -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> PrivateKey -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> PrivateKey -> m PrivateKey #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> PrivateKey -> m PrivateKey #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> PrivateKey -> m PrivateKey #

Read PrivateKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

Show PrivateKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

ASN1Object PrivateKey 
Instance details

Defined in Crypto.Types.PubKey.RSA

Methods

toASN1 :: PrivateKey -> ASN1S

fromASN1 :: [ASN1] -> Either String (PrivateKey, [ASN1])

data Blinder Source #

Blinder which is used to obfuscate the timing of the decryption primitive (used by decryption and signing).

Constructors

Blinder !Integer !Integer 
Instances
Eq Blinder Source # 
Instance details

Defined in Crypto.PubKey.RSA.Types

Methods

(==) :: Blinder -> Blinder -> Bool #

(/=) :: Blinder -> Blinder -> Bool #

Show Blinder Source # 
Instance details

Defined in Crypto.PubKey.RSA.Types

generation function

generateWith Source #

Arguments

:: (Integer, Integer)

chosen distinct primes p and q

-> Int

size in bytes

-> Integer

RSA public exponant e

-> Maybe (PublicKey, PrivateKey) 

Generate a key pair given p and q.

p and q need to be distinct prime numbers.

e need to be coprime to phi=(p-1)*(q-1). If that's not the case, the function will not return a key pair. A small hamming weight results in better performance.

  • e=0x10001 is a popular choice
  • e=3 is popular as well, but proven to not be as secure for some cases.

generate Source #

Arguments

:: CPRG g 
=> g

CPRG

-> Int

size in bytes

-> Integer

RSA public exponant e

-> ((PublicKey, PrivateKey), g) 

generate a pair of (private, public) key of size in bytes.

generateBlinder Source #

Arguments

:: CPRG g 
=> g

CPRG to use.

-> Integer

RSA public N parameter.

-> (Blinder, g) 

Generate a blinder to use with decryption and signing operation

the unique parameter apart from the random number generator is the public key value N.