Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func InitUser(username string, password string) (userdataptr *User, err error) {
- var userdata User
- encrpytionKey := userlib.Argon2Key([]byte(password), []byte(username), 16)
- privateKeyPtr, err := userlib.GenerateRSAKey()
- if err != nil {
- panic(err)
- }
- privateKey := privateKeyPtr.D
- usrName:= []byte(username)
- pwd := []byte(password)
- PvtK := []byte((*privateKey).Bytes())
- unencryptedFields := [][]byte{usrName, pwd, PvtK}
- encryptedFields := [][]byte{}
- for _, field := range unencryptedFields {
- IV := userlib.RandomBytes(userlib.BlockSize)
- ciphertext := make([]byte, len(field))
- encryptor := userlib.CFBEncrypter(encrpytionKey, IV)
- ciphertext = append(IV, field...)
- encryptor.XORKeyStream(ciphertext[userlib.BlockSize:], field)
- encryptedFields = append(encryptedFields, ciphertext)
- }
- userdata.Username = encryptedFields[0]
- userdata.Password =encryptedFields[1]
- userdata.PrivateKey = encryptedFields[2]
- // Store the user data into the untrusted datastore
- key := append([]byte(username), []byte(password)...)
- sha := userlib.NewSHA256()
- sha.Write(key)
- hash := sha.Sum([]byte(""))
- marshaluser, err := json.Marshal(userdata)
- if err != nil {
- panic(err)
- }
- userlib.DatastoreSet(string(hash), marshaluser)
- // Store public key on public key server
- userlib.KeystoreSet(string(encryptedFields[0]), privateKeyPtr.PublicKey)
- return &userdata, err
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement