diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nkeys.zig | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/nkeys.zig b/src/nkeys.zig index 7ce44f9..23594a0 100644 --- a/src/nkeys.zig +++ b/src/nkeys.zig | |||
@@ -388,7 +388,7 @@ pub fn fromRawSeed(prefix: PublicPrefixByte, raw_seed: *const [Ed25519.seed_leng | |||
388 | } | 388 | } |
389 | 389 | ||
390 | pub fn getNextLine(text: []const u8, off: *usize) ?[]const u8 { | 390 | pub fn getNextLine(text: []const u8, off: *usize) ?[]const u8 { |
391 | if (off.* <= text.len) return null; | 391 | if (off.* >= text.len) return null; |
392 | var newline_pos = mem.indexOfPos(u8, text, off.*, "\n") orelse return null; | 392 | var newline_pos = mem.indexOfPos(u8, text, off.*, "\n") orelse return null; |
393 | var start = off.*; | 393 | var start = off.*; |
394 | var end = newline_pos; | 394 | var end = newline_pos; |
@@ -427,6 +427,8 @@ pub fn findKeySection(text: []const u8, off: *usize) ?[]const u8 { | |||
427 | // A newline must be present at the end of the key footer | 427 | // A newline must be present at the end of the key footer |
428 | // See https://regex101.com/r/pEaqcJ/1 for a weird edge case in the github.com/nats-io/nkeys library | 428 | // See https://regex101.com/r/pEaqcJ/1 for a weird edge case in the github.com/nats-io/nkeys library |
429 | // Another weird edge case: https://regex101.com/r/Xmqj1h/1 | 429 | // Another weird edge case: https://regex101.com/r/Xmqj1h/1 |
430 | |||
431 | // TODO(rutgerbrf): switch to std.mem.SplitIterator | ||
430 | while (true) { | 432 | while (true) { |
431 | var opening_line = getNextLine(text, off) orelse return null; | 433 | var opening_line = getNextLine(text, off) orelse return null; |
432 | if (!isKeySectionBarrier(opening_line)) continue; | 434 | if (!isKeySectionBarrier(opening_line)) continue; |
@@ -474,11 +476,11 @@ pub fn parseDecoratedNKey(contents: []const u8) !SeedKeyPair { | |||
474 | var seed: ?[]const u8 = null; | 476 | var seed: ?[]const u8 = null; |
475 | if (findKeySection(contents, ¤t_off) != null) | 477 | if (findKeySection(contents, ¤t_off) != null) |
476 | seed = findKeySection(contents, ¤t_off); | 478 | seed = findKeySection(contents, ¤t_off); |
477 | if (seed != null) | 479 | if (seed == null) |
478 | seed = findNKey(contents) orelse return error.NoNKeySeedFound; | 480 | seed = findNKey(contents) orelse return error.NoNKeySeedFound; |
479 | if (!validNKey(seed.?)) | 481 | if (!validNKey(seed.?)) |
480 | return error.NoNKeySeedFound; | 482 | return error.NoNKeySeedFound; |
481 | return fromSeed(contents[0..text_seed_len]); | 483 | return fromSeed(seed.?[0..text_seed_len]); |
482 | } | 484 | } |
483 | 485 | ||
484 | pub fn parseDecoratedUserNKey(contents: []const u8) !SeedKeyPair { | 486 | pub fn parseDecoratedUserNKey(contents: []const u8) !SeedKeyPair { |
@@ -516,3 +518,9 @@ test { | |||
516 | var pub_key_str_b = try pub_key.publicKey(); | 518 | var pub_key_str_b = try pub_key.publicKey(); |
517 | try testing.expectEqualSlices(u8, &pub_key_str_a, &pub_key_str_b); | 519 | try testing.expectEqualSlices(u8, &pub_key_str_a, &pub_key_str_b); |
518 | } | 520 | } |
521 | |||
522 | test { | ||
523 | var creds_bytes = try std.fs.cwd().readFileAlloc(testing.allocator, "fixtures/test.creds", std.math.maxInt(usize)); | ||
524 | defer testing.allocator.free(creds_bytes); | ||
525 | _ = try parseDecoratedUserNKey(creds_bytes); | ||
526 | } | ||