diff --git a/api/user.go b/api/user.go index 654381b3f6d9a6addcc4a8cfa3c3f08bdc2bc243..cbe2b92a38041877a368291122016c9907ff9f12 100644 --- a/api/user.go +++ b/api/user.go @@ -39,32 +39,6 @@ func createNewUser(rng *fastRNG.StreamGenerator) user.Info { transmissionSalt, receptionSalt, transmissionRsaKey, receptionRsaKey = createKeys(rng) - // Salt, UID, etc gen - stream := rng.GetStream() - transmissionSalt = make([]byte, SaltSize) - - n, err := stream.Read(transmissionSalt) - - if err != nil { - jww.FATAL.Panicf(err.Error()) - } - if n != SaltSize { - jww.FATAL.Panicf("transmissionSalt size too small: %d", n) - } - - receptionSalt = make([]byte, SaltSize) - - n, err = stream.Read(receptionSalt) - - if err != nil { - jww.FATAL.Panicf(err.Error()) - } - if n != SaltSize { - jww.FATAL.Panicf("transmissionSalt size too small: %d", n) - } - - stream.Close() - transmissionID, err := xx.NewID(transmissionRsaKey.GetPublic(), transmissionSalt, id.User) if err != nil { @@ -104,8 +78,11 @@ func createKeys(rng *fastRNG.StreamGenerator) ( stream := rng.GetStream() transmissionRsaKey, err = rsa.GenerateKey(stream, rsa.DefaultRSABitLen) + if err != nil { + jww.FATAL.Panicf(err.Error()) + } transmissionSalt = make([]byte, 32) - _, err = stream.Read(receptionSalt) + _, err = stream.Read(transmissionSalt) stream.Close() if err != nil { jww.FATAL.Panicf(err.Error()) @@ -118,6 +95,9 @@ func createKeys(rng *fastRNG.StreamGenerator) ( stream := rng.GetStream() receptionRsaKey, err = rsa.GenerateKey(stream, rsa.DefaultRSABitLen) + if err != nil { + jww.FATAL.Panicf(err.Error()) + } receptionSalt = make([]byte, 32) _, err = stream.Read(receptionSalt) stream.Close() @@ -127,6 +107,21 @@ func createKeys(rng *fastRNG.StreamGenerator) ( }() wg.Wait() + isZero := func(data []byte) bool { + if len(data) == 0 { + return true + } + for i := len(data) - 1; i != 0; i-- { + if data[i] != 0 { + return false + } + } + return true + } + + if isZero(receptionSalt) || isZero(transmissionSalt) { + jww.FATAL.Panicf("empty salt generation detected") + } return }