Browse Subversion Repository
Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/key.c
Parent Directory
| Revision Log
| Patch
| 561 |
|
|
| 562 |
BOOL key_copy(Key *dest, Key *src) |
BOOL key_copy(Key *dest, Key *src) |
| 563 |
{ |
{ |
| 564 |
|
key_init(dest); |
| 565 |
switch (src->type) { |
switch (src->type) { |
| 566 |
case KEY_RSA1: // SSH1 |
case KEY_RSA1: // SSH1 |
| 567 |
dest->type = KEY_RSA1; |
dest->type = KEY_RSA1; |
| 1078 |
return; |
return; |
| 1079 |
} |
} |
| 1080 |
|
|
| 1081 |
switch (key->type) { |
key_init(key); |
|
case KEY_RSA1: |
|
|
case KEY_RSA: |
|
|
if (key->rsa != NULL) |
|
|
RSA_free(key->rsa); |
|
|
key->rsa = NULL; |
|
|
break; |
|
| 1082 |
|
|
| 1083 |
case KEY_DSA: |
free(key); |
| 1084 |
if (key->dsa != NULL) |
} |
|
DSA_free(key->dsa); |
|
|
key->dsa = NULL; |
|
|
break; |
|
| 1085 |
|
|
| 1086 |
case KEY_ECDSA256: |
void key_init(Key *key) |
| 1087 |
case KEY_ECDSA384: |
{ |
| 1088 |
case KEY_ECDSA521: |
key->type = KEY_UNSPEC; |
|
if (key->ecdsa != NULL) |
|
|
EC_KEY_free(key->ecdsa); |
|
|
key->ecdsa = NULL; |
|
|
break; |
|
| 1089 |
|
|
| 1090 |
case KEY_ED25519: |
// SSH1 |
| 1091 |
if (key->ed25519_pk) { |
key->bits = 0; |
| 1092 |
memset(key->ed25519_pk, 0, ED25519_PK_SZ); |
if (key->exp != NULL) { |
| 1093 |
free(key->ed25519_pk); |
free(key->exp); |
| 1094 |
key->ed25519_pk = NULL; |
key->exp = NULL; |
| 1095 |
} |
} |
| 1096 |
if (key->ed25519_sk) { |
if (key->mod != NULL) { |
| 1097 |
memset(key->ed25519_sk, 0, ED25519_SK_SZ); |
free(key->mod); |
| 1098 |
free(key->ed25519_sk); |
key->mod = NULL; |
| 1099 |
key->ed25519_sk = NULL; |
} |
| 1100 |
} |
|
| 1101 |
break; |
// SSH2 |
| 1102 |
|
if (key->dsa != NULL) { |
| 1103 |
|
DSA_free(key->dsa); |
| 1104 |
|
key->dsa = NULL; |
| 1105 |
|
} |
| 1106 |
|
if (key->rsa != NULL) { |
| 1107 |
|
RSA_free(key->rsa); |
| 1108 |
|
key->rsa = NULL; |
| 1109 |
|
} |
| 1110 |
|
if (key->ecdsa != NULL) { |
| 1111 |
|
EC_KEY_free(key->ecdsa); |
| 1112 |
|
key->ecdsa = NULL; |
| 1113 |
|
} |
| 1114 |
|
if (key->ed25519_pk != NULL) { |
| 1115 |
|
memset(key->ed25519_pk, 0, ED25519_PK_SZ); |
| 1116 |
|
free(key->ed25519_pk); |
| 1117 |
|
key->ed25519_pk = NULL; |
| 1118 |
|
} |
| 1119 |
|
if (key->ed25519_sk) { |
| 1120 |
|
memset(key->ed25519_sk, 0, ED25519_SK_SZ); |
| 1121 |
|
free(key->ed25519_sk); |
| 1122 |
|
key->ed25519_sk = NULL; |
| 1123 |
} |
} |
|
free(key); |
|
| 1124 |
} |
} |
| 1125 |
|
|
| 1126 |
// |
// |
|
|
Legend:
| Removed from v.6145 |
|
| changed lines |
| |
Added in v.6147 |
|
|
| |