1
*** /afs/anl.gov/appl/SSLeay-0.9.0/build/src/crypto/rsa/rsa_eay.c Thu Apr 9 06:59:29 1998
2
--- src/sc_rsa_eay.c Fri Oct 30 10:09:27 1998
13
static int RSA_eay_public_encrypt(int flen, unsigned char *from,
14
unsigned char *to, RSA *rsa,int padding);
19
static RSA_METHOD rsa_pkcs1_eay_meth={
20
! "Eric Young's PKCS#1 RSA",
21
RSA_eay_public_encrypt,
22
RSA_eay_public_decrypt,
23
RSA_eay_private_encrypt,
27
static RSA_METHOD rsa_pkcs1_eay_meth={
28
! "DEE Modified for use with PKCS#11, Eric Young's PKCS#1 RSA",
29
RSA_eay_public_encrypt,
30
RSA_eay_public_decrypt,
31
RSA_eay_private_encrypt,
37
! RSA_METHOD *RSA_PKCS1_SSLeay()
39
return(&rsa_pkcs1_eay_meth);
45
! RSA_METHOD *sc_RSA_PKCS1_SSLeay()
47
return(&rsa_pkcs1_eay_meth);
56
BIGNUM *f=NULL,*ret=NULL;
57
int i,j,k,num=0,r= -1;
58
unsigned char *buf=NULL;
63
+ CK_MECHANISM_PTR pMech = NULL;
64
+ CK_MECHANISM m_rsa_pkcs = {CKM_RSA_PKCS, 0,0};
65
+ CK_MECHANISM m_rsa_raw = {CKM_RSA_X_509, 0,0};
67
+ CK_SESSION_HANDLE hSession;
68
+ CK_OBJECT_HANDLE hObject;
70
+ hSession = (CK_SESSION_HANDLE )RSA_get_ex_data(rsa,SC_RSA_EX_DATA_INDEX_SESSION);
71
+ hObject = (CK_OBJECT_HANDLE) RSA_get_ex_data(rsa,SC_RSA_EX_DATA_INDEX_OBJECT);
74
+ fprintf(stderr,"RSA_dee_private_encrypt\n");
75
+ fprintf(stderr,"hSession=%ld hObject=%ld\n", hSession, hObject);
79
+ case RSA_PKCS1_PADDING:
80
+ pMech = &m_rsa_pkcs;
82
+ case RSA_NO_PADDING:
85
+ case RSA_SSLV23_PADDING:
87
+ RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
89
+ if (pMech == NULL) {
94
+ fprintf(stderr,"Signing Proxy Certificate on Smart Card...\n");
97
+ ck_status = C_SignInit(hSession, pMech, hObject);
98
+ if (ck_status != CKR_OK) {
99
+ SCerr(SCERR_F_RSA_ENCRYPT,SCERR_R_SIGNINIT);
100
+ ERR_add_error_data(1,sc_ERR_code(ck_status));
103
+ ck_status = C_Sign(hSession,
104
+ from, flen, to, &ulsiglen);
105
+ if (ck_status != CKR_OK) {
106
+ SCerr(SCERR_F_RSA_ENCRYPT,SCERR_R_SIGN);
107
+ ERR_add_error_data(1,sc_ERR_code(ck_status));
112
+ fprintf(stderr,"Signed\n");
117
if ((ctx=BN_CTX_new()) == NULL) goto err;
118
num=BN_num_bytes(rsa->n);
119
if ((buf=(unsigned char *)Malloc(num)) == NULL)
129
static int RSA_eay_private_decrypt(flen, from, to, rsa,padding)
137
BIGNUM *f=NULL,*ret=NULL;
140
unsigned char *buf=NULL;
145
+ CK_MECHANISM_PTR pMech = NULL;
146
+ CK_MECHANISM m_rsa_pkcs = {CKM_RSA_PKCS, 0,0};
147
+ CK_MECHANISM m_rsa_raw = {CKM_RSA_X_509, 0,0};
149
+ CK_SESSION_HANDLE hSession;
150
+ CK_OBJECT_HANDLE hObject;
152
+ hSession = (CK_SESSION_HANDLE )RSA_get_ex_data(rsa,SC_RSA_EX_DATA_INDEX_SESSION);
153
+ hObject = (CK_OBJECT_HANDLE) RSA_get_ex_data(rsa,SC_RSA_EX_DATA_INDEX_OBJECT);
157
+ /* DEE - Not realy sure where this is used, of if the correct PKCS11 module is
158
+ * being called. It looks. like the SignRecover is equivelent to what is
159
+ * called the private_decrypt
162
+ fprintf(stderr,"RSA_dee_private_decrypt\n");
163
+ fprintf(stderr,"hSession=0x%lx hObject=0x%lx\n", hSession, hObject);
167
+ case RSA_PKCS1_PADDING:
168
+ pMech = &m_rsa_pkcs;
170
+ case RSA_NO_PADDING:
171
+ pMech = &m_rsa_raw;
173
+ case RSA_SSLV23_PADDING:
175
+ RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
177
+ if (pMech == NULL) {
181
+ ulsiglen=BN_num_bytes(rsa->n);
183
+ ck_status = C_SignRecoverInit(hSession, pMech, hObject);
184
+ if (ck_status != CKR_OK) {
185
+ SCerr(SCERR_F_RSA_DECRYPT,SCERR_R_SIGNRECINIT);
186
+ ERR_add_error_data(1,sc_ERR_code(ck_status));
189
+ ck_status = C_SignRecover(hSession,
190
+ from, flen, to, &ulsiglen);
191
+ if (ck_status != CKR_OK) {
192
+ SCerr(SCERR_F_RSA_DECRYPT,SCERR_R_SIGNREC);
193
+ ERR_add_error_data(1,sc_ERR_code(ck_status));
201
if (ctx == NULL) goto err;
204
num=BN_num_bytes(rsa->n);
207
if ((buf=(unsigned char *)Malloc(num)) == NULL)
209
RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,ERR_R_MALLOC_FAILURE);
219
static int RSA_eay_public_decrypt(flen, from, to, rsa, padding)
223
static int RSA_eay_init(rsa)
227
rsa->flags|=RSA_FLAG_CACHE_PUBLIC|RSA_FLAG_CACHE_PRIVATE;