Når data skal leveres fra institusjoner til Legemiddelregisteret skal dette sendes i en SignertKryptertBundle. Denne lages ved å komprimere LegemiddelregisteretBundle, kryptere og signere innholdet.
Her beskrives hvordan du må gå frem for å lage en SignertKryptertBundle som skal sendes til Legemiddelregisterets API. Implementasjonsdetaljer (språk, biblioteker osv.) står du fritt til å velge, så lenge resultatet samsvarer med spesifikasjonen under.
Eksempel-kode for å generere en SignertKryptertBundle: Eksempel i C#
Først lages en JSON-representasjon av FHIR-ressursen LegemiddelregisterBundle.
Bruk standardbiblioteker eller tredjepartsbiblioteker for FHIR hvis ønskelig. Viktig at JSON-strukturen er korrekt for FHIR-standarden slik at validering i Legemiddelregisterets API ikke feiler. Valider gjerne FHIR-ressursen lokalt før kryptering for å unngå at meldinger feiler i serveren.
For å redusere båndbredde og sikre at krypteringsprosessen er effektiv, må dataene GZip-komprimeres
Resultatet blir en byte-array av komprimerte data. GZip benytter DEFLATE-algoritmen og er en standardisert og velprøvd metode.
I Java kan man typisk bruke klasser fra java.util.zip. I .NET finnes tilsvarende funksjonalitet i System.IO.Compression.
Resultatet etter GZip-komprimering skal være en byte-array som inneholder den komprimerte FHIR-JSONen.
nonce (initialiseringsvektor) skal være 96 bits (12 bytes).  Denne skal genereres tilfeldig hver gang en kryptering utføres.Krypter den komprimerte byte-arrayen med AES-GCM. I Java er dette tilgjengelig via AES/GCM/NoPadding, mens i .NET er det tilgjengelig via f.eks. AesGcm (fra .NET 5/6 og nyere).
encryptedContent (selve cipher-teksten)authenticationTag (brukes til å validere at innholdet ikke er endret)Den 256-bits AES-nøkkelen fra steg 3 krypteres med Legemiddelregisterets offentlige RSA-nøkkel. Dette er tilgjengelig i sertifikatene som kan lastes ned her
Algoritmen skal være RSA OAEP med SHA-256 (RSAEncryptionPadding.OaepSHA256). Resultatet er et byte-array encryptedKey.
Legemiddelregisterets offentlige RSA-nøkkel hentes fra Legemiddelregisterets virksomhetssertifikat. Thumbprintet til sertifikatet som benyttes skal angis som encryptionCertificateThumbprint i SignertKryptertBundle.
For at Legemiddelregisteret skal være sikre at innholdet faktisk kommer fra rett organisasjon (integritets- og autentisitetskontroll), må meldingen signeres:
signatureCertificateThumbprint.encryptedContent.signature.signatureCertificateThumbprint) faktisk har denne organisasjonsidentifikatoren.Alle felter skal samles i et JSON-objekt med nøyaktig rekkefølge som nedenfor. Anta at binære data konverteres til Base64-strenger.
| Felt | Type | Beskrivelse | 
|---|---|---|
| messageId | string | Unik identifikator for meldingen. Gjerne en UUID | 
| senderOrganizationIdentifier | string | Avsenders organisasjons-ID eller OID (vanligvis organisasjonsnummer) som skal samsvare med sertifikat brukt for signering. | 
| messageFormatVersion | string | Gjeldende meldingsformat-versjon: "1.0". | 
| rapporteringFra | string | Angir starttidspunkt for tidsperioden som dataene er hentet fra. Tidspunktet skal være i norsk lokaltid formattert etter ISO 8601, for eksempel: 2025-01-22T10:30:00Z | 
| rapporteringTil | string | Angir sluttidspunkt for tidsperioden som dataene er hentet fra. Tidspunktet skal være i norsk lokaltid formattert etter ISO 8601 | 
| encryptedContent | string | AES-GCM-kryptert innhold (FHIR-ressursen komprimert og kryptert). Angis som Base64-encodet string. | 
| encryptionCertificateThumbprint | string | Thumbprint for sertifikatet som ble brukt til kryptering. | 
| encryptedKey | string | AES-nøkkelen kryptert med Legemiddelregisterets offentlige RSA-nøkkel. Angis som Base64-encodet string. | 
| nonce | string | 96-bits nonce (12 bytes) brukt ved AES-GCM-krypteringen. Angis som Base64-encodet string. | 
| authenticationTag | string | 128-bits (16 bytes) autentiseringstag fra AES-GCM. Angis som Base64-encodet string. | 
| signatureCertificateThumbprint | string | Thumbprint for avsenders sertifikat (med tilhørende privat nøkkel som ble brukt for signering). | 
| signature | string | Signatur (RSA-PKCS1-v1.5 over SHA-256 hash) av kryptert innhold. Angis som Base64-encodet string. | 
| generatedAt | string | Tidspunkt (norsk lokaltid) når meldingen ble generert. |