| License | BSD-style |
|---|---|
| Maintainer | Carlos Rodriguez-Vega <crodveg@yahoo.es> |
| Stability | experimental |
| Portability | unknown |
| Safe Haskell | None |
| Language | Haskell2010 |
Crypto.PubKey.Rabin.Modified
Description
Modified-Rabin public-key digital signature algorithm.
See algorithm 11.30 in "Handbook of Applied Cryptography" by Alfred J. Menezes et al.
The Jacobi symbols here are taken modulo the public modulus, not the
private primes, so what Crypto.PubKey.Rabin.Basic says about that does
not apply; the note there about Integer arithmetic does.
Synopsis
- data PublicKey = PublicKey {
- public_size :: Int
- public_n :: Integer
- data PrivateKey = PrivateKey {}
- generate :: MonadRandom m => Int -> m (PublicKey, PrivateKey)
- sign :: HashAlgorithm hash => PrivateKey -> hash -> ByteString -> Either Error Integer
- signDigest :: HashAlgorithm hash => PrivateKey -> Digest hash -> Either Error Integer
- verify :: HashAlgorithm hash => PublicKey -> hash -> ByteString -> Integer -> Bool
- verifyDigest :: HashAlgorithm hash => PublicKey -> Digest hash -> Integer -> Bool
Documentation
Represent a Modified-Rabin public key.
Constructors
| PublicKey | |
Fields
| |
Instances
| Data PublicKey Source # | |
Defined in Crypto.PubKey.Rabin.Modified 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 :: forall r r'. (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 Source # | |
| Show PublicKey Source # | |
| Eq PublicKey Source # | |
data PrivateKey Source #
Represent a Modified-Rabin private key.
Constructors
| PrivateKey | |
Instances
| Data PrivateKey Source # | |
Defined in Crypto.PubKey.Rabin.Modified 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 :: forall r r'. (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 Source # | |
Defined in Crypto.PubKey.Rabin.Modified Methods readsPrec :: Int -> ReadS PrivateKey # readList :: ReadS [PrivateKey] # readPrec :: ReadPrec PrivateKey # readListPrec :: ReadPrec [PrivateKey] # | |
| Show PrivateKey Source # | The public part is shown; the secret fields are not. Use
|
Defined in Crypto.PubKey.Rabin.Modified Methods showsPrec :: Int -> PrivateKey -> ShowS # show :: PrivateKey -> String # showList :: [PrivateKey] -> ShowS # | |
| DebugShow PrivateKey Source # | |
Defined in Crypto.PubKey.Rabin.Modified Methods debugShow :: PrivateKey -> String Source # | |
| Eq PrivateKey Source # | |
Defined in Crypto.PubKey.Rabin.Modified | |
generate :: MonadRandom m => Int -> m (PublicKey, PrivateKey) Source #
Generate a pair of (private, public) key of size in bytes. Prime p is congruent 3 mod 8 and prime q is congruent 7 mod 8.
Arguments
| :: HashAlgorithm hash | |
| => PrivateKey | private key |
| -> hash | hash function |
| -> ByteString | message to sign |
| -> Either Error Integer |
Sign message using hash algorithm and private key.
Arguments
| :: HashAlgorithm hash | |
| => PrivateKey | private key |
| -> Digest hash | digest of the message to sign |
| -> Either Error Integer |
Sign a digest using the private key.
The digest's type says which algorithm made it, so this needs nothing else
to name one. sign takes a hash value and never reads it -- it is there
to fix the type -- which leaves a caller that is itself polymorphic in the
algorithm with nothing to pass.
Arguments
| :: HashAlgorithm hash | |
| => PublicKey | public key |
| -> hash | hash function |
| -> ByteString | message |
| -> Integer | signature |
| -> Bool |
Verify signature using hash algorithm and public key.
Arguments
| :: HashAlgorithm hash | |
| => PublicKey | public key |
| -> Digest hash | digest of the message |
| -> Integer | signature |
| -> Bool |
Verify a signature over a digest. See signDigest for why a digest
rather than a hash value.