Revision 52bbb3da
Von aquamaniac vor mehr als 21 Jahren hinzugefügt
src/crypt/ossl/cryptssl_rsa.c | ||
---|---|---|
|
||
|
||
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_Encrypt(GWEN_CRYPTKEY *key,
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_Encrypt(const GWEN_CRYPTKEY *key,
|
||
GWEN_BUFFER *src,
|
||
GWEN_BUFFER *dst){
|
||
unsigned int srclen;
|
||
... | ... | |
|
||
|
||
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_Decrypt(GWEN_CRYPTKEY *key,
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_Decrypt(const GWEN_CRYPTKEY *key,
|
||
GWEN_BUFFER *src,
|
||
GWEN_BUFFER *dst){
|
||
unsigned int srclen;
|
||
... | ... | |
|
||
|
||
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_SignBigNum(GWEN_CRYPTKEY *key,
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_SignBigNum(const GWEN_CRYPTKEY *key,
|
||
GWEN_BUFFER *src,
|
||
BIGNUM *bnresult){
|
||
unsigned int srclen;
|
||
... | ... | |
|
||
|
||
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_Sign(GWEN_CRYPTKEY *key,
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_Sign(const GWEN_CRYPTKEY *key,
|
||
GWEN_BUFFER *src,
|
||
GWEN_BUFFER *dst){
|
||
unsigned int srclen;
|
||
... | ... | |
|
||
|
||
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_Verify(GWEN_CRYPTKEY *key,
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_Verify(const GWEN_CRYPTKEY *key,
|
||
GWEN_BUFFER *src,
|
||
GWEN_BUFFER *signature){
|
||
unsigned int srclen;
|
||
... | ... | |
kd=RSA_new();
|
||
assert(kd);
|
||
|
||
DBG_INFO(0, "Reading this key:");
|
||
GWEN_DB_Dump(db, stderr, 2);
|
||
|
||
pub=GWEN_DB_GetIntValue(db, "public", 0, 1);
|
||
|
||
p=GWEN_DB_GetBinValue(db, "n", 0, 0, 0, &len);
|
||
if (p) {
|
||
bn=BN_new();
|
||
kd->n=BN_bin2bn((unsigned char*) p, len, bn);
|
||
if (pub) {
|
||
p=GWEN_DB_GetBinValue(db, "e", 0, 0, 0, &len);
|
||
if (p) {
|
||
bn=BN_new();
|
||
kd->e=BN_bin2bn((unsigned char*) p, len, bn);
|
||
}
|
||
}
|
||
else {
|
||
/* OpenSSL might be using blinding, so we MUST set e even if it is not
|
||
* otherwise used for private keys */
|
||
kd->e=BN_new();
|
||
BN_set_word(kd->e, GWEN_CRYPT_RSA_DEFAULT_EXPONENT);
|
||
}
|
||
|
||
p=GWEN_DB_GetBinValue(db, "e", 0, 0, 0, &len);
|
||
p=GWEN_DB_GetBinValue(db, "n", 0, 0, 0, &len);
|
||
if (p) {
|
||
bn=BN_new();
|
||
kd->e=BN_bin2bn((unsigned char*) p, len, bn);
|
||
kd->n=BN_bin2bn((unsigned char*) p, len, bn);
|
||
}
|
||
|
||
if (!pub) {
|
||
... | ... | |
|
||
|
||
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_ToDb(GWEN_CRYPTKEY *key,
|
||
GWEN_ERRORCODE GWEN_CryptKeyRSA_ToDb(const GWEN_CRYPTKEY *key,
|
||
GWEN_DB_NODE *db,
|
||
int pub){
|
||
char buffer[GWEN_CRYPT_RSA_MAX_KEY_LENGTH/8];
|
||
... | ... | |
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"public", pub);
|
||
|
||
l=BN_bn2bin(kd->n, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"n", buffer, l);
|
||
if (pub!=0) {
|
||
l=BN_bn2bin(kd->e, (unsigned char*) &buffer);
|
||
if (kd->n) {
|
||
l=BN_bn2bin(kd->n, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"e", buffer, l);
|
||
"n", buffer, l);
|
||
}
|
||
if (pub!=0) {
|
||
if (kd->e) {
|
||
l=BN_bn2bin(kd->e, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"e", buffer, l);
|
||
}
|
||
}
|
||
else {
|
||
l=BN_bn2bin(kd->p, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"p", buffer, l);
|
||
if (kd->p) {
|
||
l=BN_bn2bin(kd->p, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"p", buffer, l);
|
||
}
|
||
|
||
l=BN_bn2bin(kd->q, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"q", buffer, l);
|
||
if (kd->q) {
|
||
l=BN_bn2bin(kd->q, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"q", buffer, l);
|
||
}
|
||
|
||
l=BN_bn2bin(kd->dmp1, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"dmp1", buffer, l);
|
||
if (kd->dmp1) {
|
||
l=BN_bn2bin(kd->dmp1, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"dmp1", buffer, l);
|
||
}
|
||
|
||
l=BN_bn2bin(kd->dmq1, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"dmq1", buffer, l);
|
||
if (kd->dmq1) {
|
||
l=BN_bn2bin(kd->dmq1, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"dmq1", buffer, l);
|
||
}
|
||
|
||
l=BN_bn2bin(kd->iqmp, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"iqmp", buffer, l);
|
||
if (kd->iqmp) {
|
||
l=BN_bn2bin(kd->iqmp, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"iqmp", buffer, l);
|
||
}
|
||
|
||
l=BN_bn2bin(kd->d, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"d", buffer, l);
|
||
if (kd->d) {
|
||
l=BN_bn2bin(kd->d, (unsigned char*) &buffer);
|
||
GWEN_DB_SetBinValue(db,
|
||
GWEN_DB_FLAGS_DEFAULT |
|
||
GWEN_DB_FLAGS_OVERWRITE_VARS,
|
||
"d", buffer, l);
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
Auch abrufbar als: Unified diff
- fixed a bug in DB concerning loading of binary data
- added a warning to DB when an unknown type specifier is found (which
defaults to "char")
- fixed a bug in RSA code concerning loading of keys from a DB
- first successful test of client/server IPC ;-)
Now it basically works. I also fixed many bugs in the code which is not
used by programs, since it is under heavy development.
- reading keys from a file and writing then to a file now works
git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@90 70169cfe-8b10-0410-8925-dcb4b91034d8