Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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());
        }