Skip to content

Commit

Permalink
wip: x509 extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
amydevs committed Jul 18, 2024
1 parent 58d4f27 commit cfae4f2
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ const config = {
extensions: {
polykeyVersion: '1.3.6.1.4.1.57167.2.2.1',
nodeSignature: '1.3.6.1.4.1.57167.2.2.2',
networkAuthentication: '1.3.6.1.4.1.57167.2.2.3',
},
},
/**
Expand Down
40 changes: 40 additions & 0 deletions src/keys/utils/x509.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ class PolykeyNodeSignatureString {
public value: ArrayBuffer;
}

@asn1.AsnType({ type: asn1.AsnTypeTypes.Choice })
class PolykeyNetworkAuthenticationString {
@asn1.AsnProp({ type: asn1.AsnPropTypes.IA5String })
public value: string;
}

class PolykeyVersionExtension extends x509.Extension {
public readonly version: string;

Expand Down Expand Up @@ -88,6 +94,32 @@ class PolykeyNodeSignatureExtension extends x509.Extension {
}
}

class PolykeyNetworkAuthenticationExtension extends x509.Extension {
public readonly tokens: Array<string>;

public constructor(raw: ArrayBuffer);
public constructor(tokens: Array<string>, critical?: boolean);
public constructor(...args: any[]) {
if (args[0] instanceof ArrayBuffer || ArrayBuffer.isView(args[0])) {
super(args[0]);
const tokensString = asn1.AsnConvert.parse(
this.value,
PolykeyNetworkAuthenticationString,
);
this.tokens = tokensString.value.split("\u0000");
} else {
const tokensString = new PolykeyNetworkAuthenticationString();
tokensString.value = args[0].join("\u0000");
super(
config.oids.extensions.polykeyVersion,
args[1],
asn1.AsnSerializer.serialize(tokensString),
);
this.tokens = args[0];
}
}
}

/**
* Statically registers the PolykeyVersionExtension
*/
Expand All @@ -104,6 +136,14 @@ x509.ExtensionFactory.register(
PolykeyNodeSignatureExtension,
);

/**
* Statically registers the PolykeyNetworkAuthenticationExtension
*/
x509.ExtensionFactory.register(
config.oids.extensions.networkAuthentication,
PolykeyNetworkAuthenticationExtension,
)

const extendedKeyUsageFlags = {
serverAuth: '1.3.6.1.5.5.7.3.1',
clientAuth: '1.3.6.1.5.5.7.3.2',
Expand Down

0 comments on commit cfae4f2

Please sign in to comment.