Skip to content

Commit

Permalink
Add JWT tests,data and more sizes
Browse files Browse the repository at this point in the history
  • Loading branch information
jbtule committed Aug 11, 2017
1 parent 1a242f6 commit 5dd080a
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 21 deletions.
5 changes: 4 additions & 1 deletion Keyczar/Keyczar/KeySet/Metadata/KeyVersion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
*/

using System;
using System.ComponentModel;
using System.Linq;
using Keyczar.Util;
using Newtonsoft.Json;
Expand Down Expand Up @@ -86,8 +87,10 @@ public KeyVersion(KeyVersion keyVersion)
/// </summary>
/// <value>The version number.</value>
public int VersionNumber { get; set; }



[DefaultValue("")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public string Comment { get; set; }

/// <summary>
Expand Down
29 changes: 23 additions & 6 deletions Keyczar/Keyczar/Unofficial/JwtSigner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ public string SignCompact(JObject payload)
{
return _signer.SignCompact(payload);
}

public string SignCompact(byte[] payload)
{
return _signer.SignCompact(payload);
}

protected override void Dispose(bool disposing)
{
Expand Down Expand Up @@ -54,8 +59,8 @@ protected override void PostfixDataSign(HashingStream signingStream, object extr
{

}
public string SignCompact(JObject payload)

public string SignCompact(byte[] payload)
{
var key = this.GetPrimaryKey();

Expand All @@ -72,24 +77,36 @@ public string SignCompact(JObject payload)
kid = WebBase64.FromBytes(key.GetKeyHash())

};



var stringHeader = JsonConvert.SerializeObject(header);

var encodedHeader = Jwt.EncodeToBase64(stringHeader);

var stringPayload = JsonConvert.SerializeObject(payload);

var encodedPayload = Jwt.EncodeToBase64(stringPayload);
var encodedPayload = WebBase64.FromBytes(payload);


var input =Encoding.UTF8.GetBytes($"{encodedHeader}.{encodedPayload}");
using (var outStream = new MemoryStream())
using (var memStream = new MemoryStream(input))
{
Sign(memStream, outStream, null, null, input, -1);
return Encoding.UTF8.GetString(outStream.ToArray());
}

}

public string SignCompact(JObject payload)
{

var stringPayload = JsonConvert.SerializeObject(payload);

return SignCompact(Encoding.UTF8.GetBytes(stringPayload));

}



protected override void PadSignature(byte[] signature, Stream outputStream, object extra)
{
var input = (byte[]) extra;
Expand Down
20 changes: 18 additions & 2 deletions Keyczar/Keyczar/Unofficial/JwtVerifier.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,19 @@ public class JwtVerifier:KeyczarBase

public bool VerifyCompact(string input)
{
return _verifier.VerifyCompact(input, out JObject payload);
return _verifier.VerifyCompact(input, out byte[] payload);
}

public bool VerifyCompact(string input, out JObject payload)
{
return _verifier.VerifyCompact(input, out payload);
}

public bool VerifyCompact(string input, out byte[] payload)
{
return _verifier.VerifyCompact(input, out payload);
}

protected override void Dispose(bool disposing)
{
_verifier = _verifier.SafeDispose();
Expand Down Expand Up @@ -64,6 +69,17 @@ public override KeyczarConfig Config
}

public bool VerifyCompact(string input, out JObject payload)
{
if(VerifyCompact(input, out byte[] bytePayload))
{
payload = JObject.Parse(Encoding.UTF8.GetString(bytePayload));
return true;
}
payload = null;
return false;
}

public bool VerifyCompact(string input, out byte[] payload)
{

var pieces = input.Split('.');
Expand All @@ -79,7 +95,7 @@ public bool VerifyCompact(string input, out JObject payload)
var verify = Verify(message, Encoding.UTF8.GetBytes(input));

payload = verify
? JObject.Parse(Jwt.DecodeToJsonString(pieces[1]))
? ((WebBase64)(pieces[1])).ToBytes()
: null;
return verify;

Expand Down
40 changes: 31 additions & 9 deletions Keyczar/KeyczarTest/SignerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
using Keyczar.Compat;
using NUnit.Framework;
using Keyczar;
using Keyczar.Unofficial;

namespace KeyczarTest
{
Expand Down Expand Up @@ -91,17 +92,30 @@ public void TestPublicVerify(String subDir, string nestDir)
public void TestPublicVerifySizes(String subDir, string nestDir)
{
var subPath = Util.TestDataPath(TEST_DATA, subDir, nestDir);
var ks = new FileSystemKeySet(subPath);
using (var verifier = new Verifier(subPath))
using (var publicVerifier = new Verifier(subPath + ".public"))
using( var ks = new FileSystemKeySet(subPath))
using(var pks = new FileSystemKeySet(subPath + ".public"))
using (var verifier = new Verifier(ks))
using (var publicVerifier = new Verifier(pks))
using (var jwtVerifier = new JwtVerifier(ks))
using (var publicJwtVerifier = new JwtVerifier(pks))
{
foreach (var size in ks.Metadata.GetKeyType(1).KeySizeOptions)
{
var activeSignature =
(WebBase64) File.ReadAllLines(Path.Combine(subPath, String.Format("{0}.out", size))).First();
(WebBase64) File.ReadAllLines(Path.Combine(subPath, $@"{size}.out")).First();

Expect(verifier.Verify(input, activeSignature), Is.True);
Expect(publicVerifier.Verify(input, activeSignature), Is.True);

var jwtPath = Path.Combine(subPath, $@"{size}.jwt");

if (File.Exists(jwtPath))
{
var activeToken = File.ReadAllLines(jwtPath).First();

Expect(jwtVerifier.VerifyCompact(activeToken), Is.True);
Expect(publicJwtVerifier.VerifyCompact(activeToken), Is.True);
}
}
}
}
Expand All @@ -111,17 +125,25 @@ public void TestPublicVerifySizes(String subDir, string nestDir)
public void TestVerifySizes(String subDir, string nestDir)
{
var subPath = Util.TestDataPath(TEST_DATA, subDir, nestDir);
var ks = new FileSystemKeySet(subPath);
using (var verifier = new Verifier(subPath))
using (var publicVerifier = new Verifier(subPath))
using (var ks = new FileSystemKeySet(subPath))
using (var verifier = new Verifier(ks))
using (var jwtVerifier = new JwtVerifier(ks))
{
foreach (var size in ks.Metadata.GetKeyType(1).KeySizeOptions)
{
var activeSignature =
(WebBase64)File.ReadAllLines(Path.Combine(subPath, String.Format("{0}.out", size))).First();
(WebBase64)File.ReadAllLines(Path.Combine(subPath, $"{size}.out")).First();

Expect(verifier.Verify(input, activeSignature), Is.True);
Expect(publicVerifier.Verify(input, activeSignature), Is.True);

var jwtPath = Path.Combine(subPath, $@"{size}.jwt");

if (File.Exists(jwtPath))
{
var activeToken = File.ReadAllLines(jwtPath).First();

Expect(jwtVerifier.VerifyCompact(activeToken), Is.True);
}
}
}
}
Expand Down
6 changes: 4 additions & 2 deletions Keyczar/KeyczarTool/Commands/UseKey.cs
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,9 @@ private void EncodeData(Stream outstream, string destination)
{
var memstream = (MemoryStream) outstream;
outstream.Flush();
var encodedOutput = WebSafeBase64.Encode(memstream.ToArray());
var encodedOutput = _format != WireFormat.SignJwt
? WebBase64.FromBytes(memstream.ToArray()).ToString()
: Encoding.UTF8.GetString(memstream.ToArray());

if (String.IsNullOrWhiteSpace(destination))
{
Expand All @@ -203,7 +205,7 @@ private void EncodeData(Stream outstream, string destination)
if (File.Exists(destination))
throw new Exception("File already Exists!!");

File.WriteAllText(destination, new string(encodedOutput));
File.WriteAllText(destination, encodedOutput);
}
}

Expand Down
2 changes: 1 addition & 1 deletion Keyczar/TestData/remote-testdata
Submodule remote-testdata updated 58 files
+1 −1 existing-data/dotnet/unofficial/hmac_sha2-sizes/1
+1 −0 existing-data/dotnet/unofficial/hmac_sha2-sizes/128.jwt
+1 −1 existing-data/dotnet/unofficial/hmac_sha2-sizes/128.out
+1 −0 existing-data/dotnet/unofficial/hmac_sha2-sizes/192.jwt
+1 −1 existing-data/dotnet/unofficial/hmac_sha2-sizes/192.out
+1 −1 existing-data/dotnet/unofficial/hmac_sha2-sizes/2
+1 −0 existing-data/dotnet/unofficial/hmac_sha2-sizes/256.jwt
+1 −1 existing-data/dotnet/unofficial/hmac_sha2-sizes/256.out
+1 −1 existing-data/dotnet/unofficial/hmac_sha2-sizes/3
+1 −1 existing-data/dotnet/unofficial/hmac_sha2-sizes/meta
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes.public/1
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes.public/2
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes.public/3
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes.public/4
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes.public/5
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes.public/meta
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/1
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/1024.out
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/2
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/2048.out
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/3
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/3072.jwt
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/3072.out
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/4
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/4096.jwt
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/4096.out
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/5
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/8192.jwt
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/8192.out
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15-sizes/meta
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15.public/1
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15.public/2
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15.public/meta
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15/1
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15/1.out
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15/2
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15/2.out
+1 −0 existing-data/dotnet/unofficial/rsa-sign-pkcs15/meta
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes.public/1
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes.public/2
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes.public/3
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes.public/4
+1 −0 existing-data/dotnet/unofficial/rsa-sign-sizes.public/5
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes.public/meta
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes/1
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes/1024.out
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes/2
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes/2048.out
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes/3
+1 −0 existing-data/dotnet/unofficial/rsa-sign-sizes/3072.jwt
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes/3072.out
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes/4
+1 −0 existing-data/dotnet/unofficial/rsa-sign-sizes/4096.jwt
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes/4096.out
+1 −0 existing-data/dotnet/unofficial/rsa-sign-sizes/5
+1 −0 existing-data/dotnet/unofficial/rsa-sign-sizes/8192.jwt
+1 −0 existing-data/dotnet/unofficial/rsa-sign-sizes/8192.out
+1 −1 existing-data/dotnet/unofficial/rsa-sign-sizes/meta

0 comments on commit 5dd080a

Please sign in to comment.