@@ -8,6 +8,14 @@ import {
88 fetchWrappedKey ,
99 publicKeyAlgorithmToJwa ,
1010} from '../../src/access.js' ;
11+ import { create , toJsonString } from '@bufbuild/protobuf' ;
12+ import {
13+ KeyAccessSchema ,
14+ UnsignedRewrapRequestSchema ,
15+ UnsignedRewrapRequest_WithPolicyRequestSchema ,
16+ UnsignedRewrapRequest_WithPolicySchema ,
17+ UnsignedRewrapRequest_WithKeyAccessObjectSchema ,
18+ } from '../../src/platform/kas/kas_pb.js' ;
1119import { type AuthProvider , reqSignature } from '../../src/auth/auth.js' ;
1220import { allPool , anyPool } from '../../src/concurrency.js' ;
1321import { base64 , hex } from '../../src/encodings/index.js' ;
@@ -778,13 +786,41 @@ async function unwrapKey({
778786
779787 const clientPublicKey = ephemeralEncryptionKeys . publicKey ;
780788
781- const requestBodyStr = JSON . stringify ( {
782- algorithm : 'RS256' ,
783- keyAccess : keySplitInfo ,
784- policy : manifest . encryptionInformation . policy ,
789+ // TODO: how to handle defaults here?
790+ // Convert keySplitInfo to protobuf KeyAccess
791+ const keyAccessProto = create ( KeyAccessSchema , {
792+ keyType : keySplitInfo . type || '' ,
793+ kasUrl : keySplitInfo . url || '' ,
794+ protocol : keySplitInfo . protocol || '' ,
795+ wrappedKey : keySplitInfo . wrappedKey ? new Uint8Array ( base64 . decodeArrayBuffer ( keySplitInfo . wrappedKey ) ) : new Uint8Array ( ) ,
796+ policyBinding : keySplitInfo . policyBinding ,
797+ kid : keySplitInfo . kid || '' ,
798+ splitId : keySplitInfo . sid || '' ,
799+ encryptedMetadata : keySplitInfo . encryptedMetadata || '' ,
800+ } ) ;
801+
802+ // Create the protobuf request
803+ const unsignedRequest = create ( UnsignedRewrapRequestSchema , {
785804 clientPublicKey,
805+ requests : [
806+ create ( UnsignedRewrapRequest_WithPolicyRequestSchema , {
807+ keyAccessObjects : [
808+ create ( UnsignedRewrapRequest_WithKeyAccessObjectSchema , {
809+ keyAccessObjectId : 'kao-0' ,
810+ keyAccessObject : keyAccessProto ,
811+ } ) ,
812+ ] ,
813+ policy : create ( UnsignedRewrapRequest_WithPolicySchema , {
814+ id : 'policy-0' ,
815+ body : manifest . encryptionInformation . policy ,
816+ } ) ,
817+ algorithm : 'RS256' ,
818+ } ) ,
819+ ] ,
786820 } ) ;
787821
822+ const requestBodyStr = toJsonString ( UnsignedRewrapRequestSchema , unsignedRequest ) ;
823+
788824 const jwtPayload = { requestBody : requestBodyStr } ;
789825 const signedRequestToken = await reqSignature ( jwtPayload , dpopKeys . privateKey ) ;
790826
0 commit comments