private static string Encrypt004(string content, byte[] key, string assocData) { var nonce = RandomSeed(24); var authenticated_data = Convert.ToBase64String(Encoding.UTF8.GetBytes(assocData)); var ciphertext = ANCrypt.XChaCha20Encrypt(Encoding.UTF8.GetBytes(content), EncodingConverter.StringToByteArrayCaseInsensitive(nonce), key, Encoding.UTF8.GetBytes(authenticated_data)); return(string.Join(":", "004", nonce, Convert.ToBase64String(ciphertext), authenticated_data)); }
public static (byte[] mk, byte[] sp, string reqpw) CreateAuthData004(StandardNoteAPI.APIResultAuthParams apiparams, string mail, string uip) { var salt = StandardNoteCrypt.SHA256Bytes(string.Join(":", apiparams.identifier, apiparams.pw_nonce)).Take(128 / 8).ToArray(); var derivedKey = ANCrypt.Argon2(Encoding.UTF8.GetBytes(uip), salt, 5, 64 * 1024, 64); var masterKey = derivedKey.Skip(00).Take(32).ToArray(); var serverPassword = derivedKey.Skip(32).Take(32).ToArray(); var requestPassword = EncodingConverter.ByteToHexBitFiddleLowercase(serverPassword); return(masterKey, serverPassword, requestPassword); }
private static string Decrypt004(string encContent, byte[] key) { var split = encContent.Split(':'); var version = split[0]; var nonce = EncodingConverter.StringToByteArrayCaseInsensitive(split[1]); var ciphertext = Convert.FromBase64String(split[2]); var authenticated_data = Encoding.UTF8.GetBytes(split[3]); if (version != "004") { throw new StandardNoteAPIException($"Version must be 004 to decrypt 004 encrypted item (duh.)"); } var plain = ANCrypt.XChaCha20Decrypt(ciphertext, nonce, key, authenticated_data); return(Encoding.UTF8.GetString(plain)); }