cryptocipher-0.3.0: Symmetrical Block, Stream and PubKey Ciphers

PortabilityGood
Stabilityexperimental
MaintainerVincent Hanquez <vincent@snarc.org>
Safe HaskellSafe-Infered

Crypto.Cipher.RSA

Description

 

Synopsis

Documentation

data Error Source

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 (>= private_size - 11)

MessageNotRecognized

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

SignatureTooLong

the signature generated through the hash is too long to process with this key

RandomGenFailure GenError

the random generator returns an error. give the opportunity to reseed for example.

KeyInternalError

the whole key is probably not valid, since the message is bigger than the key size

Instances

data PublicKey

Represent a RSA public key

Constructors

PublicKey 

Fields

public_size :: Int

size of key in bytes

public_n :: Integer

public p*q

public_e :: Integer

public exponant e

data PrivateKey

Represent a RSA private key.

Only the sz, n and 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

private_size :: Int

size of key in bytes

private_n :: Integer

private p*q

private_d :: Integer

private exponant d

private_p :: Integer

p prime number

private_q :: Integer

q prime number

private_dP :: Integer

d mod (p-1)

private_dQ :: Integer

d mod (q-1)

private_qinv :: Integer

q^(-1) mod p

generate :: CryptoRandomGen g => g -> Int -> Integer -> Either Error ((PublicKey, PrivateKey), g)Source

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

decrypt :: PrivateKey -> ByteString -> Either Error ByteStringSource

decrypt message using the private key.

encrypt :: CryptoRandomGen g => g -> PublicKey -> ByteString -> Either Error (ByteString, g)Source

encrypt a bytestring using the public key and a CryptoRandomGen random generator. - the message need to be smaller than the key size - 11

sign :: HashF -> HashASN1 -> PrivateKey -> ByteString -> Either Error ByteStringSource

sign message using private key, a hash and its ASN1 description

verify :: HashF -> HashASN1 -> PublicKey -> ByteString -> ByteString -> Either Error BoolSource

verify message with the signed message