Botan 1.10.17
pk_ops.h
Go to the documentation of this file.
1/*
2* PK Operation Types
3* (C) 2010 Jack Lloyd
4*
5* Distributed under the terms of the Botan license
6*/
7
8#ifndef BOTAN_PK_OPERATIONS_H__
9#define BOTAN_PK_OPERATIONS_H__
10
11#include <botan/secmem.h>
12#include <botan/rng.h>
13
14namespace Botan {
15
16namespace PK_Ops {
17
18/**
19* Public key encryption interface
20*/
21class BOTAN_DLL Encryption
22 {
23 public:
24 virtual size_t max_input_bits() const = 0;
25
26 virtual SecureVector<byte> encrypt(const byte msg[], size_t msg_len,
27 RandomNumberGenerator& rng) = 0;
28
29 virtual ~Encryption() {}
30 };
31
32/**
33* Public key decryption interface
34*/
35class BOTAN_DLL Decryption
36 {
37 public:
38 virtual size_t max_input_bits() const = 0;
39
40 virtual SecureVector<byte> decrypt(const byte msg[],
41 size_t msg_len) = 0;
42
43 virtual ~Decryption() {}
44 };
45
46/**
47* Public key signature creation interface
48*/
49class BOTAN_DLL Signature
50 {
51 public:
52 /**
53 * Find out the number of message parts supported by this scheme.
54 * @return number of message parts
55 */
56 virtual size_t message_parts() const { return 1; }
57
58 /**
59 * Find out the message part size supported by this scheme/key.
60 * @return size of the message parts
61 */
62 virtual size_t message_part_size() const { return 0; }
63
64 /**
65 * Get the maximum message size in bits supported by this public key.
66 * @return maximum message in bits
67 */
68 virtual size_t max_input_bits() const = 0;
69
70 /*
71 * Perform a signature operation
72 * @param msg the message
73 * @param msg_len the length of msg in bytes
74 * @param rng a random number generator
75 */
76 virtual SecureVector<byte> sign(const byte msg[], size_t msg_len,
77 RandomNumberGenerator& rng) = 0;
78
79 virtual ~Signature() {}
80 };
81
82/**
83* Public key signature verification interface
84*/
85class BOTAN_DLL Verification
86 {
87 public:
88 /**
89 * Get the maximum message size in bits supported by this public key.
90 * @return maximum message in bits
91 */
92 virtual size_t max_input_bits() const = 0;
93
94 /**
95 * Find out the number of message parts supported by this scheme.
96 * @return number of message parts
97 */
98 virtual size_t message_parts() const { return 1; }
99
100 /**
101 * Find out the message part size supported by this scheme/key.
102 * @return size of the message parts
103 */
104 virtual size_t message_part_size() const { return 0; }
105
106 /**
107 * @return boolean specifying if this key type supports message
108 * recovery and thus if you need to call verify() or verify_mr()
109 */
110 virtual bool with_recovery() const = 0;
111
112 /*
113 * Perform a signature check operation
114 * @param msg the message
115 * @param msg_len the length of msg in bytes
116 * @param sig the signature
117 * @param sig_len the length of sig in bytes
118 * @returns if signature is a valid one for message
119 */
120 virtual bool verify(const byte[], size_t,
121 const byte[], size_t)
122 {
123 throw Invalid_State("Message recovery required");
124 }
125
126 /*
127 * Perform a signature operation (with message recovery)
128 * Only call this if with_recovery() returns true
129 * @param msg the message
130 * @param msg_len the length of msg in bytes
131 * @returns recovered message
132 */
133 virtual SecureVector<byte> verify_mr(const byte[],
134 size_t)
135 {
136 throw Invalid_State("Message recovery not supported");
137 }
138
139 virtual ~Verification() {}
140 };
141
142/**
143* A generic key agreement Operation (eg DH or ECDH)
144*/
145class BOTAN_DLL Key_Agreement
146 {
147 public:
148 /*
149 * Perform a key agreement operation
150 * @param w the other key value
151 * @param w_len the length of w in bytes
152 * @returns the agreed key
153 */
154 virtual SecureVector<byte> agree(const byte w[], size_t w_len) = 0;
155
156 virtual ~Key_Agreement() {}
157 };
158
159}
160
161}
162
163#endif
virtual SecureVector< byte > decrypt(const byte msg[], size_t msg_len)=0
virtual size_t max_input_bits() const =0
virtual size_t max_input_bits() const =0
virtual SecureVector< byte > encrypt(const byte msg[], size_t msg_len, RandomNumberGenerator &rng)=0
virtual SecureVector< byte > agree(const byte w[], size_t w_len)=0
virtual size_t message_part_size() const
Definition pk_ops.h:62
virtual size_t message_parts() const
Definition pk_ops.h:56
virtual SecureVector< byte > sign(const byte msg[], size_t msg_len, RandomNumberGenerator &rng)=0
virtual size_t max_input_bits() const =0
virtual bool verify(const byte[], size_t, const byte[], size_t)
Definition pk_ops.h:120
virtual size_t message_part_size() const
Definition pk_ops.h:104
virtual size_t max_input_bits() const =0
virtual size_t message_parts() const
Definition pk_ops.h:98
virtual SecureVector< byte > verify_mr(const byte[], size_t)
Definition pk_ops.h:133
virtual bool with_recovery() const =0