Botan 1.10.17
Botan::RSA_Private_Operation Class Reference

#include <rsa.h>

Inheritance diagram for Botan::RSA_Private_Operation:
Botan::PK_Ops::Signature Botan::PK_Ops::Decryption

Public Member Functions

SecureVector< bytedecrypt (const byte msg[], size_t msg_len)
size_t max_input_bits () const
virtual size_t message_part_size () const
virtual size_t message_parts () const
 RSA_Private_Operation (const RSA_PrivateKey &rsa)
SecureVector< bytesign (const byte msg[], size_t msg_len, RandomNumberGenerator &rng)

Detailed Description

RSA private (decrypt/sign) operation

Definition at line 89 of file rsa.h.

Constructor & Destructor Documentation

◆ RSA_Private_Operation()

Botan::RSA_Private_Operation::RSA_Private_Operation ( const RSA_PrivateKey & rsa)

Definition at line 63 of file rsa.cpp.

63 :
64 n(rsa.get_n()),
65 q(rsa.get_q()),
66 c(rsa.get_c()),
67 powermod_e_n(rsa.get_e(), rsa.get_n()),
68 powermod_d1_p(rsa.get_d1(), rsa.get_p()),
69 powermod_d2_q(rsa.get_d2(), rsa.get_q()),
70 mod_p(rsa.get_p())
71 {
72 BigInt k(global_state().global_rng(), n.bits() - 1);
73 blinder = Blinder(powermod_e_n(k), inverse_mod(k, n), n);
74 }
BigInt inverse_mod(const BigInt &n, const BigInt &mod)
Definition numthry.cpp:314
Library_State & global_state()

References Botan::Blinder::Blinder(), Botan::global_state(), and Botan::inverse_mod().

Referenced by Botan::Core_Engine::get_decryption_op(), and Botan::Core_Engine::get_signature_op().

Member Function Documentation

◆ decrypt()

SecureVector< byte > Botan::RSA_Private_Operation::decrypt ( const byte msg[],
size_t msg_len )
virtual

Implements Botan::PK_Ops::Decryption.

Definition at line 107 of file rsa.cpp.

108 {
109 BigInt m(msg, msg_len);
110 BigInt x = blinder.unblind(private_op(blinder.blind(m)));
111
112 BOTAN_ASSERT(m == powermod_e_n(x),
113 "RSA private op failed consistency check");
114
115 return BigInt::encode(x);
116 }
#define BOTAN_ASSERT(expr, msg)
Definition assert.h:19
static SecureVector< byte > encode(const BigInt &n, Base base=Binary)
Definition big_code.cpp:64

References BOTAN_ASSERT, and Botan::BigInt::encode().

◆ max_input_bits()

size_t Botan::RSA_Private_Operation::max_input_bits ( ) const
inlinevirtual

Get the maximum message size in bits supported by this public key.

Returns
maximum message in bits

Implements Botan::PK_Ops::Signature.

Definition at line 95 of file rsa.h.

95{ return (n.bits() - 1); }

◆ message_part_size()

virtual size_t Botan::PK_Ops::Signature::message_part_size ( ) const
inlinevirtualinherited

Find out the message part size supported by this scheme/key.

Returns
size of the message parts

Reimplemented in Botan::DSA_Signature_Operation, Botan::ECDSA_Signature_Operation, and Botan::NR_Signature_Operation.

Definition at line 62 of file pk_ops.h.

62{ return 0; }

◆ message_parts()

virtual size_t Botan::PK_Ops::Signature::message_parts ( ) const
inlinevirtualinherited

Find out the number of message parts supported by this scheme.

Returns
number of message parts

Reimplemented in Botan::DSA_Signature_Operation, Botan::ECDSA_Signature_Operation, and Botan::NR_Signature_Operation.

Definition at line 56 of file pk_ops.h.

56{ return 1; }

◆ sign()

SecureVector< byte > Botan::RSA_Private_Operation::sign ( const byte msg[],
size_t msg_len,
RandomNumberGenerator & rng )
virtual

Implements Botan::PK_Ops::Signature.

Definition at line 90 of file rsa.cpp.

92 {
93 /* We don't check signatures against powermod_e_n here because
94 PK_Signer checks verification consistency for all signature
95 algorithms.
96 */
97
98 BigInt m(msg, msg_len);
99 BigInt x = blinder.unblind(private_op(blinder.blind(m)));
100 return BigInt::encode_1363(x, n.bytes());
101 }
static SecureVector< byte > encode_1363(const BigInt &n, size_t bytes)
Definition big_code.cpp:78

References Botan::BigInt::bytes(), and Botan::BigInt::encode_1363().


The documentation for this class was generated from the following files: