PureBasic
PureBasic
Sign a JWS with an HMAC Key from BinData
See more JSON Web Signatures (JWS) Examples
Demonstrates Jws.SetMacKeyBd, which sets the symmetric MAC key for a signature from the raw bytes in a BinData.
Background. This is the in-memory equivalent of SetMacKey, for when the key material is already available as bytes.
Chilkat PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkJws.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
jws.i = CkJws::ckCreate()
If jws.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Protected header specifying HMAC-SHA256.
header.i = CkJsonObject::ckCreate()
If header.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckUpdateString(header,"alg","HS256")
success = CkJws::ckSetProtectedHeader(jws,0,header)
If success = 0
Debug CkJws::ckLastErrorText(jws)
CkJws::ckDispose(jws)
CkJsonObject::ckDispose(header)
ProcedureReturn
EndIf
bIncludeBom.i = 0
success = CkJws::ckSetPayload(jws,"This is the content to sign.","utf-8",bIncludeBom)
If success = 0
Debug CkJws::ckLastErrorText(jws)
CkJws::ckDispose(jws)
CkJsonObject::ckDispose(header)
ProcedureReturn
EndIf
; Set the symmetric MAC key for signature 0 from the raw bytes in a BinData. In production, obtain
; the key material from a secure source.
bdKey.i = CkBinData::ckCreate()
If bdKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkBinData::ckAppendEncoded(bdKey,"YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU=","base64")
success = CkJws::ckSetMacKeyBd(jws,0,bdKey)
If success = 0
Debug CkJws::ckLastErrorText(jws)
CkJws::ckDispose(jws)
CkJsonObject::ckDispose(header)
CkBinData::ckDispose(bdKey)
ProcedureReturn
EndIf
jwsCompact.s = CkJws::ckCreateJws(jws)
If CkJws::ckLastMethodSuccess(jws) = 0
Debug CkJws::ckLastErrorText(jws)
CkJws::ckDispose(jws)
CkJsonObject::ckDispose(header)
CkBinData::ckDispose(bdKey)
ProcedureReturn
EndIf
Debug jwsCompact
CkJws::ckDispose(jws)
CkJsonObject::ckDispose(header)
CkBinData::ckDispose(bdKey)
ProcedureReturn
EndProcedure