aboutsummaryrefslogtreecommitdiff
path: root/src/identity/identity_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/identity/identity_api.c')
-rw-r--r--src/identity/identity_api.c99
1 files changed, 89 insertions, 10 deletions
diff --git a/src/identity/identity_api.c b/src/identity/identity_api.c
index 47a78e2bb..0731fc06f 100644
--- a/src/identity/identity_api.c
+++ b/src/identity/identity_api.c
@@ -1136,11 +1136,11 @@ GNUNET_IDENTITY_signature_verify_raw_ (uint32_t purpose,
1136 1136
1137 1137
1138ssize_t 1138ssize_t
1139GNUNET_IDENTITY_encrypt (const void *block, 1139GNUNET_IDENTITY_encrypt_old (const void *block,
1140 size_t size, 1140 size_t size,
1141 const struct GNUNET_IDENTITY_PublicKey *pub, 1141 const struct GNUNET_IDENTITY_PublicKey *pub,
1142 struct GNUNET_CRYPTO_EcdhePublicKey *ecc, 1142 struct GNUNET_CRYPTO_EcdhePublicKey *ecc,
1143 void *result) 1143 void *result)
1144{ 1144{
1145 struct GNUNET_CRYPTO_EcdhePrivateKey pk; 1145 struct GNUNET_CRYPTO_EcdhePrivateKey pk;
1146 GNUNET_CRYPTO_ecdhe_key_create (&pk); 1146 GNUNET_CRYPTO_ecdhe_key_create (&pk);
@@ -1175,11 +1175,90 @@ GNUNET_IDENTITY_encrypt (const void *block,
1175 1175
1176 1176
1177ssize_t 1177ssize_t
1178GNUNET_IDENTITY_decrypt (const void *block, 1178GNUNET_IDENTITY_encrypt2 (const void *pt,
1179 size_t size, 1179 size_t pt_size,
1180 const struct GNUNET_IDENTITY_PrivateKey *priv, 1180 const struct GNUNET_IDENTITY_PublicKey *pub,
1181 const struct GNUNET_CRYPTO_EcdhePublicKey *ecc, 1181 void *ct_buf,
1182 void *result) 1182 size_t ct_size)
1183{
1184 struct GNUNET_HashCode k;
1185 struct GNUNET_CRYPTO_FoKemC *kemc = (struct GNUNET_CRYPTO_FoKemC*) ct_buf;
1186 unsigned char *encrypted_data = (unsigned char*) &kemc[1];
1187 unsigned char nonce[crypto_secretbox_NONCEBYTES];
1188 unsigned char key[crypto_secretbox_KEYBYTES];
1189
1190 switch (ntohl (pub->type))
1191 {
1192 case GNUNET_IDENTITY_TYPE_ECDSA:
1193 if (GNUNET_SYSERR == GNUNET_CRYPTO_ecdsa_fo_kem_encaps (&(pub->ecdsa_key),
1194 kemc,
1195 &k))
1196 return -1;
1197 break;
1198 case GNUNET_IDENTITY_TYPE_EDDSA:
1199 if (GNUNET_SYSERR == GNUNET_CRYPTO_eddsa_fo_kem_encaps (&pub->eddsa_key,
1200 kemc,
1201 &k))
1202 return -1;
1203 break;
1204 default:
1205 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Unsupported key type\n");
1206 return -1;
1207 }
1208 memcpy (key, &k, crypto_secretbox_KEYBYTES);
1209 memcpy (nonce, ((char* ) &k) + crypto_secretbox_KEYBYTES,
1210 crypto_secretbox_NONCEBYTES);
1211 crypto_secretbox_easy (encrypted_data, pt, pt_size, nonce, key);
1212 return pt_size + crypto_secretbox_MACBYTES + sizeof (*kemc);
1213}
1214
1215
1216ssize_t
1217GNUNET_IDENTITY_decrypt2 (const void *ct_buf,
1218 size_t ct_size,
1219 const struct GNUNET_IDENTITY_PrivateKey *priv,
1220 void *pt,
1221 size_t pt_size)
1222{
1223 struct GNUNET_HashCode k;
1224 struct GNUNET_CRYPTO_FoKemC *kemc = (struct GNUNET_CRYPTO_FoKemC*) ct_buf;
1225 unsigned char *encrypted_data = (unsigned char*) &kemc[1];
1226 unsigned char nonce[crypto_secretbox_NONCEBYTES];
1227 unsigned char key[crypto_secretbox_KEYBYTES];
1228
1229 switch (ntohl (priv->type))
1230 {
1231 case GNUNET_IDENTITY_TYPE_ECDSA:
1232 if (GNUNET_SYSERR == GNUNET_CRYPTO_ecdsa_fo_kem_decaps (&(priv->ecdsa_key),
1233 kemc,
1234 &k))
1235 return -1;
1236 break;
1237 case GNUNET_IDENTITY_TYPE_EDDSA:
1238 if (GNUNET_SYSERR == GNUNET_CRYPTO_eddsa_fo_kem_decaps (&(priv->eddsa_key),
1239 kemc,
1240 &k))
1241 return -1;
1242 break;
1243 default:
1244 return -1;
1245 }
1246 memcpy (key, &k, crypto_secretbox_KEYBYTES);
1247 memcpy (nonce, ((char* ) &k) + crypto_secretbox_KEYBYTES,
1248 crypto_secretbox_NONCEBYTES);
1249 if (crypto_secretbox_open_easy (pt, encrypted_data, ct_size - sizeof (*kemc),
1250 nonce, key))
1251 return -1;
1252 return ct_size - sizeof (*kemc) - crypto_secretbox_MACBYTES;
1253}
1254
1255
1256ssize_t
1257GNUNET_IDENTITY_decrypt_old (const void *block,
1258 size_t size,
1259 const struct GNUNET_IDENTITY_PrivateKey *priv,
1260 const struct GNUNET_CRYPTO_EcdhePublicKey *ecc,
1261 void *result)
1183{ 1262{
1184 struct GNUNET_HashCode hash; 1263 struct GNUNET_HashCode hash;
1185 switch (ntohl (priv->type)) 1264 switch (ntohl (priv->type))