Caleb James DeLisle caf9963793 Switch to a Rust libsodium build 4 年之前
..
api.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
base.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
base2.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
crypto_int16.h caf9963793 Switch to a Rust libsodium build 4 年之前
crypto_int32.h caf9963793 Switch to a Rust libsodium build 4 年之前
crypto_int64.h caf9963793 Switch to a Rust libsodium build 4 年之前
crypto_int8.h caf9963793 Switch to a Rust libsodium build 4 年之前
crypto_sign.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
crypto_sign_ed25519.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
crypto_types.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
crypto_uint16.h caf9963793 Switch to a Rust libsodium build 4 年之前
crypto_uint32.h caf9963793 Switch to a Rust libsodium build 4 年之前
crypto_uint64.h caf9963793 Switch to a Rust libsodium build 4 年之前
crypto_uint8.h caf9963793 Switch to a Rust libsodium build 4 年之前
d.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
d2.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_0.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_1.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_add.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_cmov.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_copy.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_frombytes.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_invert.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_isnegative.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_isnonzero.c caf9963793 Switch to a Rust libsodium build 4 年之前
fe_mul.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_neg.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_pow22523.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_sq.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_sq2.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_sub.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
fe_tobytes.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_add.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_add.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_double_scalarmult.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_frombytes.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_madd.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_madd.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_msub.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_msub.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p1p1_to_p2.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p1p1_to_p3.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p2_0.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p2_dbl.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p2_dbl.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p3_0.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p3_dbl.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p3_to_cached.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p3_to_p2.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_p3_tobytes.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_precomp_0.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_scalarmult_base.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_sub.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_sub.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
ge_tobytes.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
open.c caf9963793 Switch to a Rust libsodium build 4 年之前
pow22523.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
pow225521.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
readme.md d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
sc.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
sc_muladd.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
sc_reduce.c d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前
sqrtm1.h d6bb3220d0 Vendor the custom signing code from nacl so that it is possible to use libsodium for everything else 4 年之前

readme.md

Why is there a half a crypto library copy-pasted into cjdns?

hysterical raisins

In the beginning cjdns didn't use signing at all, only encryption. Then when the route server model was adopted, we needed to sign messages, particularly we needed to know that a message was signed with a key corrisponding to a particular cjdns IPv6 address.

Fortunately there exists a way to convert the same keys between the twisted edwards curve (ed25519) used for signing and the this conversion is widely supported and believed to be safe.

Unfortunately we needed to go the other way, from curve25519 keys to ed25519, but since we have the private key at this stage, we can simply copy the function which creates an ed25519 pubkey and everything is good. Except that it isn't.

Ed25519 API is designed in such a way that it expects to be able to hash the private key before usage, but if we're converting that key from a curve25519 key and expecting the public key to come out correct, we need to reimplement the sign function to not hash the key before usage, so that's what we did.

My apologies to all of the security researchers out there who are now gritting their teeth at the prospect of reviewing "home-made crypto", the ugly is confined to Sign.c and I've made efforts to explain what it's doing and why I believe it to be equivilent to nacl/libsodium's crypto_sign().