public void Should_EnrollNewRecord_When_PasswordSpecified() { var rngMock = Substitute.For <IPheRandomGenerator>(); var offset = 0; rngMock.GenerateNonce(16).Returns(x => { offset += 16; return(((Span <byte>) this.mockedRandomBytes).Slice(offset - 16, 16).ToArray()); }); rngMock.GenerateNonce(32).Returns(x => { offset += 32; return(((Span <byte>) this.mockedRandomBytes).Slice(offset - 32, 32).ToArray()); }); var crypto = new PheCrypto(); crypto.Rng = rngMock; var enrollmentRecordRight = EnrollmentRecord.Parser.ParseFrom(Google.Protobuf.ByteString.CopyFrom(this.enrollmentRecord)); var appSecretKey = crypto.DecodeSecretKey(this.clientPrivate); var servicePublicKey = crypto.DecodePublicKey(this.serverPublic); var pheClient = new PheClient(appSecretKey, servicePublicKey); pheClient.Crypto = crypto; var(enrollmentRec, key) = pheClient.EnrollAccount(this.password, this.enrollmentResponse); var enrollmentRecordGot = EnrollmentRecord.Parser.ParseFrom(Google.Protobuf.ByteString.CopyFrom(enrollmentRec)); Assert.Equal(Bytes.ToString(this.enrollmentRecord, StringEncoding.BASE64), Bytes.ToString(enrollmentRec, StringEncoding.BASE64)); Assert.Equal(Bytes.ToString(this.recordKey, StringEncoding.BASE64), Bytes.ToString(key, StringEncoding.BASE64)); }
public void TestValidPasswordRequest() { var rngMock = Substitute.For <IPheRandomGenerator>(); rngMock.GenerateNonce(16).Returns(this.mockedRandomBytes.Take(16).ToArray()); rngMock.GenerateNonce(32).Returns(this.mockedRandomBytes.Take(32).ToArray()); var crypto = new PheCrypto(); crypto.Rng = rngMock; var appSecretKey = crypto.DecodeSecretKey(this.clientPrivate); var servicePublicKey = crypto.DecodePublicKey(this.serverPublic); var pheClient = new PheClient(appSecretKey, servicePublicKey); pheClient.Crypto = crypto; var req = pheClient.CreateVerifyPasswordRequest(this.password, this.enrollmentRecord); Assert.Equal(this.verifyPasswordReq, req); }
public void TestRotateEnrollmentRecord() { var rngMock = Substitute.For <IPheRandomGenerator>(); rngMock.GenerateNonce(16).Returns(this.mockedRandomBytes.Take(16).ToArray()); rngMock.GenerateNonce(32).Returns(this.mockedRandomBytes.Take(32).ToArray()); var crypto = new PheCrypto(); crypto.Rng = rngMock; var appSecretKey = crypto.DecodeSecretKey(this.clientPrivate); var servicePublicKey = crypto.DecodePublicKey(this.serverPublic); var pheClient = new PheClient(); pheClient.Crypto = crypto; var updatedEnrollmentRecord = pheClient.UpdateEnrollmentRecord(this.token, this.enrollmentRecord); Assert.Equal(this.updatedRecord, updatedEnrollmentRecord); }
public void TestRotateClientKey() { var rngMock = Substitute.For <IPheRandomGenerator>(); rngMock.GenerateNonce(16).Returns(this.mockedRandomBytes.Take(16).ToArray()); rngMock.GenerateNonce(32).Returns(this.mockedRandomBytes.Take(32).ToArray()); var crypto = new PheCrypto(); crypto.Rng = rngMock; var appSecretKey = crypto.DecodeSecretKey(this.clientPrivate); var servicePublicKey = crypto.DecodePublicKey(this.serverPublic); var pheClient = new PheClient(appSecretKey, servicePublicKey); pheClient.Crypto = crypto; var(rotatedAppSecretKey, rotatedServicePublicKey) = pheClient.RotateKeys(this.token); Assert.Equal(this.rotatedClientSk, rotatedAppSecretKey.Encode()); Assert.Equal(this.rotatedServerPub, rotatedServicePublicKey.Encode()); }