162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * CAAM Protocol Data Block (PDB) definition header file 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2008-2016 Freescale Semiconductor, Inc. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef CAAM_PDB_H 1062306a36Sopenharmony_ci#define CAAM_PDB_H 1162306a36Sopenharmony_ci#include "compat.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci * PDB- IPSec ESP Header Modification Options 1562306a36Sopenharmony_ci */ 1662306a36Sopenharmony_ci#define PDBHMO_ESP_DECAP_SHIFT 28 1762306a36Sopenharmony_ci#define PDBHMO_ESP_ENCAP_SHIFT 28 1862306a36Sopenharmony_ci/* 1962306a36Sopenharmony_ci * Encap and Decap - Decrement TTL (Hop Limit) - Based on the value of the 2062306a36Sopenharmony_ci * Options Byte IP version (IPvsn) field: 2162306a36Sopenharmony_ci * if IPv4, decrement the inner IP header TTL field (byte 8); 2262306a36Sopenharmony_ci * if IPv6 decrement the inner IP header Hop Limit field (byte 7). 2362306a36Sopenharmony_ci*/ 2462306a36Sopenharmony_ci#define PDBHMO_ESP_DECAP_DEC_TTL (0x02 << PDBHMO_ESP_DECAP_SHIFT) 2562306a36Sopenharmony_ci#define PDBHMO_ESP_ENCAP_DEC_TTL (0x02 << PDBHMO_ESP_ENCAP_SHIFT) 2662306a36Sopenharmony_ci/* 2762306a36Sopenharmony_ci * Decap - DiffServ Copy - Copy the IPv4 TOS or IPv6 Traffic Class byte 2862306a36Sopenharmony_ci * from the outer IP header to the inner IP header. 2962306a36Sopenharmony_ci */ 3062306a36Sopenharmony_ci#define PDBHMO_ESP_DIFFSERV (0x01 << PDBHMO_ESP_DECAP_SHIFT) 3162306a36Sopenharmony_ci/* 3262306a36Sopenharmony_ci * Encap- Copy DF bit -if an IPv4 tunnel mode outer IP header is coming from 3362306a36Sopenharmony_ci * the PDB, copy the DF bit from the inner IP header to the outer IP header. 3462306a36Sopenharmony_ci */ 3562306a36Sopenharmony_ci#define PDBHMO_ESP_DFBIT (0x04 << PDBHMO_ESP_ENCAP_SHIFT) 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define PDBNH_ESP_ENCAP_SHIFT 16 3862306a36Sopenharmony_ci#define PDBNH_ESP_ENCAP_MASK (0xff << PDBNH_ESP_ENCAP_SHIFT) 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci#define PDBHDRLEN_ESP_DECAP_SHIFT 16 4162306a36Sopenharmony_ci#define PDBHDRLEN_MASK (0x0fff << PDBHDRLEN_ESP_DECAP_SHIFT) 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci#define PDB_NH_OFFSET_SHIFT 8 4462306a36Sopenharmony_ci#define PDB_NH_OFFSET_MASK (0xff << PDB_NH_OFFSET_SHIFT) 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci/* 4762306a36Sopenharmony_ci * PDB - IPSec ESP Encap/Decap Options 4862306a36Sopenharmony_ci */ 4962306a36Sopenharmony_ci#define PDBOPTS_ESP_ARSNONE 0x00 /* no antireplay window */ 5062306a36Sopenharmony_ci#define PDBOPTS_ESP_ARS32 0x40 /* 32-entry antireplay window */ 5162306a36Sopenharmony_ci#define PDBOPTS_ESP_ARS128 0x80 /* 128-entry antireplay window */ 5262306a36Sopenharmony_ci#define PDBOPTS_ESP_ARS64 0xc0 /* 64-entry antireplay window */ 5362306a36Sopenharmony_ci#define PDBOPTS_ESP_ARS_MASK 0xc0 /* antireplay window mask */ 5462306a36Sopenharmony_ci#define PDBOPTS_ESP_IVSRC 0x20 /* IV comes from internal random gen */ 5562306a36Sopenharmony_ci#define PDBOPTS_ESP_ESN 0x10 /* extended sequence included */ 5662306a36Sopenharmony_ci#define PDBOPTS_ESP_OUTFMT 0x08 /* output only decapsulation (decap) */ 5762306a36Sopenharmony_ci#define PDBOPTS_ESP_IPHDRSRC 0x08 /* IP header comes from PDB (encap) */ 5862306a36Sopenharmony_ci#define PDBOPTS_ESP_INCIPHDR 0x04 /* Prepend IP header to output frame */ 5962306a36Sopenharmony_ci#define PDBOPTS_ESP_IPVSN 0x02 /* process IPv6 header */ 6062306a36Sopenharmony_ci#define PDBOPTS_ESP_AOFL 0x04 /* adjust out frame len (decap, SEC>=5.3)*/ 6162306a36Sopenharmony_ci#define PDBOPTS_ESP_TUNNEL 0x01 /* tunnel mode next-header byte */ 6262306a36Sopenharmony_ci#define PDBOPTS_ESP_IPV6 0x02 /* ip header version is V6 */ 6362306a36Sopenharmony_ci#define PDBOPTS_ESP_DIFFSERV 0x40 /* copy TOS/TC from inner iphdr */ 6462306a36Sopenharmony_ci#define PDBOPTS_ESP_UPDATE_CSUM 0x80 /* encap-update ip header checksum */ 6562306a36Sopenharmony_ci#define PDBOPTS_ESP_VERIFY_CSUM 0x20 /* decap-validate ip header checksum */ 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci/* 6862306a36Sopenharmony_ci * General IPSec encap/decap PDB definitions 6962306a36Sopenharmony_ci */ 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci/** 7262306a36Sopenharmony_ci * ipsec_encap_cbc - PDB part for IPsec CBC encapsulation 7362306a36Sopenharmony_ci * @iv: 16-byte array initialization vector 7462306a36Sopenharmony_ci */ 7562306a36Sopenharmony_cistruct ipsec_encap_cbc { 7662306a36Sopenharmony_ci u8 iv[16]; 7762306a36Sopenharmony_ci}; 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci/** 8062306a36Sopenharmony_ci * ipsec_encap_ctr - PDB part for IPsec CTR encapsulation 8162306a36Sopenharmony_ci * @ctr_nonce: 4-byte array nonce 8262306a36Sopenharmony_ci * @ctr_initial: initial count constant 8362306a36Sopenharmony_ci * @iv: initialization vector 8462306a36Sopenharmony_ci */ 8562306a36Sopenharmony_cistruct ipsec_encap_ctr { 8662306a36Sopenharmony_ci u8 ctr_nonce[4]; 8762306a36Sopenharmony_ci u32 ctr_initial; 8862306a36Sopenharmony_ci u64 iv; 8962306a36Sopenharmony_ci}; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci/** 9262306a36Sopenharmony_ci * ipsec_encap_ccm - PDB part for IPsec CCM encapsulation 9362306a36Sopenharmony_ci * @salt: 3-byte array salt (lower 24 bits) 9462306a36Sopenharmony_ci * @ccm_opt: CCM algorithm options - MSB-LSB description: 9562306a36Sopenharmony_ci * b0_flags (8b) - CCM B0; use 0x5B for 8-byte ICV, 0x6B for 12-byte ICV, 9662306a36Sopenharmony_ci * 0x7B for 16-byte ICV (cf. RFC4309, RFC3610) 9762306a36Sopenharmony_ci * ctr_flags (8b) - counter flags; constant equal to 0x3 9862306a36Sopenharmony_ci * ctr_initial (16b) - initial count constant 9962306a36Sopenharmony_ci * @iv: initialization vector 10062306a36Sopenharmony_ci */ 10162306a36Sopenharmony_cistruct ipsec_encap_ccm { 10262306a36Sopenharmony_ci u8 salt[4]; 10362306a36Sopenharmony_ci u32 ccm_opt; 10462306a36Sopenharmony_ci u64 iv; 10562306a36Sopenharmony_ci}; 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci/** 10862306a36Sopenharmony_ci * ipsec_encap_gcm - PDB part for IPsec GCM encapsulation 10962306a36Sopenharmony_ci * @salt: 3-byte array salt (lower 24 bits) 11062306a36Sopenharmony_ci * @rsvd: reserved, do not use 11162306a36Sopenharmony_ci * @iv: initialization vector 11262306a36Sopenharmony_ci */ 11362306a36Sopenharmony_cistruct ipsec_encap_gcm { 11462306a36Sopenharmony_ci u8 salt[4]; 11562306a36Sopenharmony_ci u32 rsvd1; 11662306a36Sopenharmony_ci u64 iv; 11762306a36Sopenharmony_ci}; 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci/** 12062306a36Sopenharmony_ci * ipsec_encap_pdb - PDB for IPsec encapsulation 12162306a36Sopenharmony_ci * @options: MSB-LSB description 12262306a36Sopenharmony_ci * hmo (header manipulation options) - 4b 12362306a36Sopenharmony_ci * reserved - 4b 12462306a36Sopenharmony_ci * next header - 8b 12562306a36Sopenharmony_ci * next header offset - 8b 12662306a36Sopenharmony_ci * option flags (depend on selected algorithm) - 8b 12762306a36Sopenharmony_ci * @seq_num_ext_hi: (optional) IPsec Extended Sequence Number (ESN) 12862306a36Sopenharmony_ci * @seq_num: IPsec sequence number 12962306a36Sopenharmony_ci * @spi: IPsec SPI (Security Parameters Index) 13062306a36Sopenharmony_ci * @ip_hdr_len: optional IP Header length (in bytes) 13162306a36Sopenharmony_ci * reserved - 16b 13262306a36Sopenharmony_ci * Opt. IP Hdr Len - 16b 13362306a36Sopenharmony_ci * @ip_hdr: optional IP Header content 13462306a36Sopenharmony_ci */ 13562306a36Sopenharmony_cistruct ipsec_encap_pdb { 13662306a36Sopenharmony_ci u32 options; 13762306a36Sopenharmony_ci u32 seq_num_ext_hi; 13862306a36Sopenharmony_ci u32 seq_num; 13962306a36Sopenharmony_ci union { 14062306a36Sopenharmony_ci struct ipsec_encap_cbc cbc; 14162306a36Sopenharmony_ci struct ipsec_encap_ctr ctr; 14262306a36Sopenharmony_ci struct ipsec_encap_ccm ccm; 14362306a36Sopenharmony_ci struct ipsec_encap_gcm gcm; 14462306a36Sopenharmony_ci }; 14562306a36Sopenharmony_ci u32 spi; 14662306a36Sopenharmony_ci u32 ip_hdr_len; 14762306a36Sopenharmony_ci u32 ip_hdr[]; 14862306a36Sopenharmony_ci}; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci/** 15162306a36Sopenharmony_ci * ipsec_decap_cbc - PDB part for IPsec CBC decapsulation 15262306a36Sopenharmony_ci * @rsvd: reserved, do not use 15362306a36Sopenharmony_ci */ 15462306a36Sopenharmony_cistruct ipsec_decap_cbc { 15562306a36Sopenharmony_ci u32 rsvd[2]; 15662306a36Sopenharmony_ci}; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci/** 15962306a36Sopenharmony_ci * ipsec_decap_ctr - PDB part for IPsec CTR decapsulation 16062306a36Sopenharmony_ci * @ctr_nonce: 4-byte array nonce 16162306a36Sopenharmony_ci * @ctr_initial: initial count constant 16262306a36Sopenharmony_ci */ 16362306a36Sopenharmony_cistruct ipsec_decap_ctr { 16462306a36Sopenharmony_ci u8 ctr_nonce[4]; 16562306a36Sopenharmony_ci u32 ctr_initial; 16662306a36Sopenharmony_ci}; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci/** 16962306a36Sopenharmony_ci * ipsec_decap_ccm - PDB part for IPsec CCM decapsulation 17062306a36Sopenharmony_ci * @salt: 3-byte salt (lower 24 bits) 17162306a36Sopenharmony_ci * @ccm_opt: CCM algorithm options - MSB-LSB description: 17262306a36Sopenharmony_ci * b0_flags (8b) - CCM B0; use 0x5B for 8-byte ICV, 0x6B for 12-byte ICV, 17362306a36Sopenharmony_ci * 0x7B for 16-byte ICV (cf. RFC4309, RFC3610) 17462306a36Sopenharmony_ci * ctr_flags (8b) - counter flags; constant equal to 0x3 17562306a36Sopenharmony_ci * ctr_initial (16b) - initial count constant 17662306a36Sopenharmony_ci */ 17762306a36Sopenharmony_cistruct ipsec_decap_ccm { 17862306a36Sopenharmony_ci u8 salt[4]; 17962306a36Sopenharmony_ci u32 ccm_opt; 18062306a36Sopenharmony_ci}; 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci/** 18362306a36Sopenharmony_ci * ipsec_decap_gcm - PDB part for IPsec GCN decapsulation 18462306a36Sopenharmony_ci * @salt: 4-byte salt 18562306a36Sopenharmony_ci * @rsvd: reserved, do not use 18662306a36Sopenharmony_ci */ 18762306a36Sopenharmony_cistruct ipsec_decap_gcm { 18862306a36Sopenharmony_ci u8 salt[4]; 18962306a36Sopenharmony_ci u32 resvd; 19062306a36Sopenharmony_ci}; 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci/** 19362306a36Sopenharmony_ci * ipsec_decap_pdb - PDB for IPsec decapsulation 19462306a36Sopenharmony_ci * @options: MSB-LSB description 19562306a36Sopenharmony_ci * hmo (header manipulation options) - 4b 19662306a36Sopenharmony_ci * IP header length - 12b 19762306a36Sopenharmony_ci * next header offset - 8b 19862306a36Sopenharmony_ci * option flags (depend on selected algorithm) - 8b 19962306a36Sopenharmony_ci * @seq_num_ext_hi: (optional) IPsec Extended Sequence Number (ESN) 20062306a36Sopenharmony_ci * @seq_num: IPsec sequence number 20162306a36Sopenharmony_ci * @anti_replay: Anti-replay window; size depends on ARS (option flags) 20262306a36Sopenharmony_ci */ 20362306a36Sopenharmony_cistruct ipsec_decap_pdb { 20462306a36Sopenharmony_ci u32 options; 20562306a36Sopenharmony_ci union { 20662306a36Sopenharmony_ci struct ipsec_decap_cbc cbc; 20762306a36Sopenharmony_ci struct ipsec_decap_ctr ctr; 20862306a36Sopenharmony_ci struct ipsec_decap_ccm ccm; 20962306a36Sopenharmony_ci struct ipsec_decap_gcm gcm; 21062306a36Sopenharmony_ci }; 21162306a36Sopenharmony_ci u32 seq_num_ext_hi; 21262306a36Sopenharmony_ci u32 seq_num; 21362306a36Sopenharmony_ci __be32 anti_replay[4]; 21462306a36Sopenharmony_ci}; 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci/* 21762306a36Sopenharmony_ci * IPSec ESP Datapath Protocol Override Register (DPOVRD) 21862306a36Sopenharmony_ci */ 21962306a36Sopenharmony_cistruct ipsec_deco_dpovrd { 22062306a36Sopenharmony_ci#define IPSEC_ENCAP_DECO_DPOVRD_USE 0x80 22162306a36Sopenharmony_ci u8 ovrd_ecn; 22262306a36Sopenharmony_ci u8 ip_hdr_len; 22362306a36Sopenharmony_ci u8 nh_offset; 22462306a36Sopenharmony_ci u8 next_header; /* reserved if decap */ 22562306a36Sopenharmony_ci}; 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci/* 22862306a36Sopenharmony_ci * IEEE 802.11i WiFi Protocol Data Block 22962306a36Sopenharmony_ci */ 23062306a36Sopenharmony_ci#define WIFI_PDBOPTS_FCS 0x01 23162306a36Sopenharmony_ci#define WIFI_PDBOPTS_AR 0x40 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_cistruct wifi_encap_pdb { 23462306a36Sopenharmony_ci u16 mac_hdr_len; 23562306a36Sopenharmony_ci u8 rsvd; 23662306a36Sopenharmony_ci u8 options; 23762306a36Sopenharmony_ci u8 iv_flags; 23862306a36Sopenharmony_ci u8 pri; 23962306a36Sopenharmony_ci u16 pn1; 24062306a36Sopenharmony_ci u32 pn2; 24162306a36Sopenharmony_ci u16 frm_ctrl_mask; 24262306a36Sopenharmony_ci u16 seq_ctrl_mask; 24362306a36Sopenharmony_ci u8 rsvd1[2]; 24462306a36Sopenharmony_ci u8 cnst; 24562306a36Sopenharmony_ci u8 key_id; 24662306a36Sopenharmony_ci u8 ctr_flags; 24762306a36Sopenharmony_ci u8 rsvd2; 24862306a36Sopenharmony_ci u16 ctr_init; 24962306a36Sopenharmony_ci}; 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_cistruct wifi_decap_pdb { 25262306a36Sopenharmony_ci u16 mac_hdr_len; 25362306a36Sopenharmony_ci u8 rsvd; 25462306a36Sopenharmony_ci u8 options; 25562306a36Sopenharmony_ci u8 iv_flags; 25662306a36Sopenharmony_ci u8 pri; 25762306a36Sopenharmony_ci u16 pn1; 25862306a36Sopenharmony_ci u32 pn2; 25962306a36Sopenharmony_ci u16 frm_ctrl_mask; 26062306a36Sopenharmony_ci u16 seq_ctrl_mask; 26162306a36Sopenharmony_ci u8 rsvd1[4]; 26262306a36Sopenharmony_ci u8 ctr_flags; 26362306a36Sopenharmony_ci u8 rsvd2; 26462306a36Sopenharmony_ci u16 ctr_init; 26562306a36Sopenharmony_ci}; 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci/* 26862306a36Sopenharmony_ci * IEEE 802.16 WiMAX Protocol Data Block 26962306a36Sopenharmony_ci */ 27062306a36Sopenharmony_ci#define WIMAX_PDBOPTS_FCS 0x01 27162306a36Sopenharmony_ci#define WIMAX_PDBOPTS_AR 0x40 /* decap only */ 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_cistruct wimax_encap_pdb { 27462306a36Sopenharmony_ci u8 rsvd[3]; 27562306a36Sopenharmony_ci u8 options; 27662306a36Sopenharmony_ci u32 nonce; 27762306a36Sopenharmony_ci u8 b0_flags; 27862306a36Sopenharmony_ci u8 ctr_flags; 27962306a36Sopenharmony_ci u16 ctr_init; 28062306a36Sopenharmony_ci /* begin DECO writeback region */ 28162306a36Sopenharmony_ci u32 pn; 28262306a36Sopenharmony_ci /* end DECO writeback region */ 28362306a36Sopenharmony_ci}; 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_cistruct wimax_decap_pdb { 28662306a36Sopenharmony_ci u8 rsvd[3]; 28762306a36Sopenharmony_ci u8 options; 28862306a36Sopenharmony_ci u32 nonce; 28962306a36Sopenharmony_ci u8 iv_flags; 29062306a36Sopenharmony_ci u8 ctr_flags; 29162306a36Sopenharmony_ci u16 ctr_init; 29262306a36Sopenharmony_ci /* begin DECO writeback region */ 29362306a36Sopenharmony_ci u32 pn; 29462306a36Sopenharmony_ci u8 rsvd1[2]; 29562306a36Sopenharmony_ci u16 antireplay_len; 29662306a36Sopenharmony_ci u64 antireplay_scorecard; 29762306a36Sopenharmony_ci /* end DECO writeback region */ 29862306a36Sopenharmony_ci}; 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci/* 30162306a36Sopenharmony_ci * IEEE 801.AE MacSEC Protocol Data Block 30262306a36Sopenharmony_ci */ 30362306a36Sopenharmony_ci#define MACSEC_PDBOPTS_FCS 0x01 30462306a36Sopenharmony_ci#define MACSEC_PDBOPTS_AR 0x40 /* used in decap only */ 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_cistruct macsec_encap_pdb { 30762306a36Sopenharmony_ci u16 aad_len; 30862306a36Sopenharmony_ci u8 rsvd; 30962306a36Sopenharmony_ci u8 options; 31062306a36Sopenharmony_ci u64 sci; 31162306a36Sopenharmony_ci u16 ethertype; 31262306a36Sopenharmony_ci u8 tci_an; 31362306a36Sopenharmony_ci u8 rsvd1; 31462306a36Sopenharmony_ci /* begin DECO writeback region */ 31562306a36Sopenharmony_ci u32 pn; 31662306a36Sopenharmony_ci /* end DECO writeback region */ 31762306a36Sopenharmony_ci}; 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_cistruct macsec_decap_pdb { 32062306a36Sopenharmony_ci u16 aad_len; 32162306a36Sopenharmony_ci u8 rsvd; 32262306a36Sopenharmony_ci u8 options; 32362306a36Sopenharmony_ci u64 sci; 32462306a36Sopenharmony_ci u8 rsvd1[3]; 32562306a36Sopenharmony_ci /* begin DECO writeback region */ 32662306a36Sopenharmony_ci u8 antireplay_len; 32762306a36Sopenharmony_ci u32 pn; 32862306a36Sopenharmony_ci u64 antireplay_scorecard; 32962306a36Sopenharmony_ci /* end DECO writeback region */ 33062306a36Sopenharmony_ci}; 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci/* 33362306a36Sopenharmony_ci * SSL/TLS/DTLS Protocol Data Blocks 33462306a36Sopenharmony_ci */ 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci#define TLS_PDBOPTS_ARS32 0x40 33762306a36Sopenharmony_ci#define TLS_PDBOPTS_ARS64 0xc0 33862306a36Sopenharmony_ci#define TLS_PDBOPTS_OUTFMT 0x08 33962306a36Sopenharmony_ci#define TLS_PDBOPTS_IV_WRTBK 0x02 /* 1.1/1.2/DTLS only */ 34062306a36Sopenharmony_ci#define TLS_PDBOPTS_EXP_RND_IV 0x01 /* 1.1/1.2/DTLS only */ 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_cistruct tls_block_encap_pdb { 34362306a36Sopenharmony_ci u8 type; 34462306a36Sopenharmony_ci u8 version[2]; 34562306a36Sopenharmony_ci u8 options; 34662306a36Sopenharmony_ci u64 seq_num; 34762306a36Sopenharmony_ci u32 iv[4]; 34862306a36Sopenharmony_ci}; 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_cistruct tls_stream_encap_pdb { 35162306a36Sopenharmony_ci u8 type; 35262306a36Sopenharmony_ci u8 version[2]; 35362306a36Sopenharmony_ci u8 options; 35462306a36Sopenharmony_ci u64 seq_num; 35562306a36Sopenharmony_ci u8 i; 35662306a36Sopenharmony_ci u8 j; 35762306a36Sopenharmony_ci u8 rsvd1[2]; 35862306a36Sopenharmony_ci}; 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_cistruct dtls_block_encap_pdb { 36162306a36Sopenharmony_ci u8 type; 36262306a36Sopenharmony_ci u8 version[2]; 36362306a36Sopenharmony_ci u8 options; 36462306a36Sopenharmony_ci u16 epoch; 36562306a36Sopenharmony_ci u16 seq_num[3]; 36662306a36Sopenharmony_ci u32 iv[4]; 36762306a36Sopenharmony_ci}; 36862306a36Sopenharmony_ci 36962306a36Sopenharmony_cistruct tls_block_decap_pdb { 37062306a36Sopenharmony_ci u8 rsvd[3]; 37162306a36Sopenharmony_ci u8 options; 37262306a36Sopenharmony_ci u64 seq_num; 37362306a36Sopenharmony_ci u32 iv[4]; 37462306a36Sopenharmony_ci}; 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_cistruct tls_stream_decap_pdb { 37762306a36Sopenharmony_ci u8 rsvd[3]; 37862306a36Sopenharmony_ci u8 options; 37962306a36Sopenharmony_ci u64 seq_num; 38062306a36Sopenharmony_ci u8 i; 38162306a36Sopenharmony_ci u8 j; 38262306a36Sopenharmony_ci u8 rsvd1[2]; 38362306a36Sopenharmony_ci}; 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_cistruct dtls_block_decap_pdb { 38662306a36Sopenharmony_ci u8 rsvd[3]; 38762306a36Sopenharmony_ci u8 options; 38862306a36Sopenharmony_ci u16 epoch; 38962306a36Sopenharmony_ci u16 seq_num[3]; 39062306a36Sopenharmony_ci u32 iv[4]; 39162306a36Sopenharmony_ci u64 antireplay_scorecard; 39262306a36Sopenharmony_ci}; 39362306a36Sopenharmony_ci 39462306a36Sopenharmony_ci/* 39562306a36Sopenharmony_ci * SRTP Protocol Data Blocks 39662306a36Sopenharmony_ci */ 39762306a36Sopenharmony_ci#define SRTP_PDBOPTS_MKI 0x08 39862306a36Sopenharmony_ci#define SRTP_PDBOPTS_AR 0x40 39962306a36Sopenharmony_ci 40062306a36Sopenharmony_cistruct srtp_encap_pdb { 40162306a36Sopenharmony_ci u8 x_len; 40262306a36Sopenharmony_ci u8 mki_len; 40362306a36Sopenharmony_ci u8 n_tag; 40462306a36Sopenharmony_ci u8 options; 40562306a36Sopenharmony_ci u32 cnst0; 40662306a36Sopenharmony_ci u8 rsvd[2]; 40762306a36Sopenharmony_ci u16 cnst1; 40862306a36Sopenharmony_ci u16 salt[7]; 40962306a36Sopenharmony_ci u16 cnst2; 41062306a36Sopenharmony_ci u32 rsvd1; 41162306a36Sopenharmony_ci u32 roc; 41262306a36Sopenharmony_ci u32 opt_mki; 41362306a36Sopenharmony_ci}; 41462306a36Sopenharmony_ci 41562306a36Sopenharmony_cistruct srtp_decap_pdb { 41662306a36Sopenharmony_ci u8 x_len; 41762306a36Sopenharmony_ci u8 mki_len; 41862306a36Sopenharmony_ci u8 n_tag; 41962306a36Sopenharmony_ci u8 options; 42062306a36Sopenharmony_ci u32 cnst0; 42162306a36Sopenharmony_ci u8 rsvd[2]; 42262306a36Sopenharmony_ci u16 cnst1; 42362306a36Sopenharmony_ci u16 salt[7]; 42462306a36Sopenharmony_ci u16 cnst2; 42562306a36Sopenharmony_ci u16 rsvd1; 42662306a36Sopenharmony_ci u16 seq_num; 42762306a36Sopenharmony_ci u32 roc; 42862306a36Sopenharmony_ci u64 antireplay_scorecard; 42962306a36Sopenharmony_ci}; 43062306a36Sopenharmony_ci 43162306a36Sopenharmony_ci/* 43262306a36Sopenharmony_ci * DSA/ECDSA Protocol Data Blocks 43362306a36Sopenharmony_ci * Two of these exist: DSA-SIGN, and DSA-VERIFY. They are similar 43462306a36Sopenharmony_ci * except for the treatment of "w" for verify, "s" for sign, 43562306a36Sopenharmony_ci * and the placement of "a,b". 43662306a36Sopenharmony_ci */ 43762306a36Sopenharmony_ci#define DSA_PDB_SGF_SHIFT 24 43862306a36Sopenharmony_ci#define DSA_PDB_SGF_MASK (0xff << DSA_PDB_SGF_SHIFT) 43962306a36Sopenharmony_ci#define DSA_PDB_SGF_Q (0x80 << DSA_PDB_SGF_SHIFT) 44062306a36Sopenharmony_ci#define DSA_PDB_SGF_R (0x40 << DSA_PDB_SGF_SHIFT) 44162306a36Sopenharmony_ci#define DSA_PDB_SGF_G (0x20 << DSA_PDB_SGF_SHIFT) 44262306a36Sopenharmony_ci#define DSA_PDB_SGF_W (0x10 << DSA_PDB_SGF_SHIFT) 44362306a36Sopenharmony_ci#define DSA_PDB_SGF_S (0x10 << DSA_PDB_SGF_SHIFT) 44462306a36Sopenharmony_ci#define DSA_PDB_SGF_F (0x08 << DSA_PDB_SGF_SHIFT) 44562306a36Sopenharmony_ci#define DSA_PDB_SGF_C (0x04 << DSA_PDB_SGF_SHIFT) 44662306a36Sopenharmony_ci#define DSA_PDB_SGF_D (0x02 << DSA_PDB_SGF_SHIFT) 44762306a36Sopenharmony_ci#define DSA_PDB_SGF_AB_SIGN (0x02 << DSA_PDB_SGF_SHIFT) 44862306a36Sopenharmony_ci#define DSA_PDB_SGF_AB_VERIFY (0x01 << DSA_PDB_SGF_SHIFT) 44962306a36Sopenharmony_ci 45062306a36Sopenharmony_ci#define DSA_PDB_L_SHIFT 7 45162306a36Sopenharmony_ci#define DSA_PDB_L_MASK (0x3ff << DSA_PDB_L_SHIFT) 45262306a36Sopenharmony_ci 45362306a36Sopenharmony_ci#define DSA_PDB_N_MASK 0x7f 45462306a36Sopenharmony_ci 45562306a36Sopenharmony_cistruct dsa_sign_pdb { 45662306a36Sopenharmony_ci u32 sgf_ln; /* Use DSA_PDB_ definitions per above */ 45762306a36Sopenharmony_ci u8 *q; 45862306a36Sopenharmony_ci u8 *r; 45962306a36Sopenharmony_ci u8 *g; /* or Gx,y */ 46062306a36Sopenharmony_ci u8 *s; 46162306a36Sopenharmony_ci u8 *f; 46262306a36Sopenharmony_ci u8 *c; 46362306a36Sopenharmony_ci u8 *d; 46462306a36Sopenharmony_ci u8 *ab; /* ECC only */ 46562306a36Sopenharmony_ci u8 *u; 46662306a36Sopenharmony_ci}; 46762306a36Sopenharmony_ci 46862306a36Sopenharmony_cistruct dsa_verify_pdb { 46962306a36Sopenharmony_ci u32 sgf_ln; 47062306a36Sopenharmony_ci u8 *q; 47162306a36Sopenharmony_ci u8 *r; 47262306a36Sopenharmony_ci u8 *g; /* or Gx,y */ 47362306a36Sopenharmony_ci u8 *w; /* or Wx,y */ 47462306a36Sopenharmony_ci u8 *f; 47562306a36Sopenharmony_ci u8 *c; 47662306a36Sopenharmony_ci u8 *d; 47762306a36Sopenharmony_ci u8 *tmp; /* temporary data block */ 47862306a36Sopenharmony_ci u8 *ab; /* only used if ECC processing */ 47962306a36Sopenharmony_ci}; 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_ci/* RSA Protocol Data Block */ 48262306a36Sopenharmony_ci#define RSA_PDB_SGF_SHIFT 28 48362306a36Sopenharmony_ci#define RSA_PDB_E_SHIFT 12 48462306a36Sopenharmony_ci#define RSA_PDB_E_MASK (0xFFF << RSA_PDB_E_SHIFT) 48562306a36Sopenharmony_ci#define RSA_PDB_D_SHIFT 12 48662306a36Sopenharmony_ci#define RSA_PDB_D_MASK (0xFFF << RSA_PDB_D_SHIFT) 48762306a36Sopenharmony_ci#define RSA_PDB_Q_SHIFT 12 48862306a36Sopenharmony_ci#define RSA_PDB_Q_MASK (0xFFF << RSA_PDB_Q_SHIFT) 48962306a36Sopenharmony_ci 49062306a36Sopenharmony_ci#define RSA_PDB_SGF_F (0x8 << RSA_PDB_SGF_SHIFT) 49162306a36Sopenharmony_ci#define RSA_PDB_SGF_G (0x4 << RSA_PDB_SGF_SHIFT) 49262306a36Sopenharmony_ci#define RSA_PRIV_PDB_SGF_F (0x4 << RSA_PDB_SGF_SHIFT) 49362306a36Sopenharmony_ci#define RSA_PRIV_PDB_SGF_G (0x8 << RSA_PDB_SGF_SHIFT) 49462306a36Sopenharmony_ci 49562306a36Sopenharmony_ci#define RSA_PRIV_KEY_FRM_1 0 49662306a36Sopenharmony_ci#define RSA_PRIV_KEY_FRM_2 1 49762306a36Sopenharmony_ci#define RSA_PRIV_KEY_FRM_3 2 49862306a36Sopenharmony_ci 49962306a36Sopenharmony_ci/** 50062306a36Sopenharmony_ci * RSA Encrypt Protocol Data Block 50162306a36Sopenharmony_ci * @sgf: scatter-gather field 50262306a36Sopenharmony_ci * @f_dma: dma address of input data 50362306a36Sopenharmony_ci * @g_dma: dma address of encrypted output data 50462306a36Sopenharmony_ci * @n_dma: dma address of RSA modulus 50562306a36Sopenharmony_ci * @e_dma: dma address of RSA public exponent 50662306a36Sopenharmony_ci * @f_len: length in octets of the input data 50762306a36Sopenharmony_ci */ 50862306a36Sopenharmony_cistruct rsa_pub_pdb { 50962306a36Sopenharmony_ci u32 sgf; 51062306a36Sopenharmony_ci dma_addr_t f_dma; 51162306a36Sopenharmony_ci dma_addr_t g_dma; 51262306a36Sopenharmony_ci dma_addr_t n_dma; 51362306a36Sopenharmony_ci dma_addr_t e_dma; 51462306a36Sopenharmony_ci u32 f_len; 51562306a36Sopenharmony_ci}; 51662306a36Sopenharmony_ci 51762306a36Sopenharmony_ci#define SIZEOF_RSA_PUB_PDB (2 * sizeof(u32) + 4 * caam_ptr_sz) 51862306a36Sopenharmony_ci 51962306a36Sopenharmony_ci/** 52062306a36Sopenharmony_ci * RSA Decrypt PDB - Private Key Form #1 52162306a36Sopenharmony_ci * @sgf: scatter-gather field 52262306a36Sopenharmony_ci * @g_dma: dma address of encrypted input data 52362306a36Sopenharmony_ci * @f_dma: dma address of output data 52462306a36Sopenharmony_ci * @n_dma: dma address of RSA modulus 52562306a36Sopenharmony_ci * @d_dma: dma address of RSA private exponent 52662306a36Sopenharmony_ci */ 52762306a36Sopenharmony_cistruct rsa_priv_f1_pdb { 52862306a36Sopenharmony_ci u32 sgf; 52962306a36Sopenharmony_ci dma_addr_t g_dma; 53062306a36Sopenharmony_ci dma_addr_t f_dma; 53162306a36Sopenharmony_ci dma_addr_t n_dma; 53262306a36Sopenharmony_ci dma_addr_t d_dma; 53362306a36Sopenharmony_ci}; 53462306a36Sopenharmony_ci 53562306a36Sopenharmony_ci#define SIZEOF_RSA_PRIV_F1_PDB (sizeof(u32) + 4 * caam_ptr_sz) 53662306a36Sopenharmony_ci 53762306a36Sopenharmony_ci/** 53862306a36Sopenharmony_ci * RSA Decrypt PDB - Private Key Form #2 53962306a36Sopenharmony_ci * @sgf : scatter-gather field 54062306a36Sopenharmony_ci * @g_dma : dma address of encrypted input data 54162306a36Sopenharmony_ci * @f_dma : dma address of output data 54262306a36Sopenharmony_ci * @d_dma : dma address of RSA private exponent 54362306a36Sopenharmony_ci * @p_dma : dma address of RSA prime factor p of RSA modulus n 54462306a36Sopenharmony_ci * @q_dma : dma address of RSA prime factor q of RSA modulus n 54562306a36Sopenharmony_ci * @tmp1_dma: dma address of temporary buffer. CAAM uses this temporary buffer 54662306a36Sopenharmony_ci * as internal state buffer. It is assumed to be as long as p. 54762306a36Sopenharmony_ci * @tmp2_dma: dma address of temporary buffer. CAAM uses this temporary buffer 54862306a36Sopenharmony_ci * as internal state buffer. It is assumed to be as long as q. 54962306a36Sopenharmony_ci * @p_q_len : length in bytes of first two prime factors of the RSA modulus n 55062306a36Sopenharmony_ci */ 55162306a36Sopenharmony_cistruct rsa_priv_f2_pdb { 55262306a36Sopenharmony_ci u32 sgf; 55362306a36Sopenharmony_ci dma_addr_t g_dma; 55462306a36Sopenharmony_ci dma_addr_t f_dma; 55562306a36Sopenharmony_ci dma_addr_t d_dma; 55662306a36Sopenharmony_ci dma_addr_t p_dma; 55762306a36Sopenharmony_ci dma_addr_t q_dma; 55862306a36Sopenharmony_ci dma_addr_t tmp1_dma; 55962306a36Sopenharmony_ci dma_addr_t tmp2_dma; 56062306a36Sopenharmony_ci u32 p_q_len; 56162306a36Sopenharmony_ci}; 56262306a36Sopenharmony_ci 56362306a36Sopenharmony_ci#define SIZEOF_RSA_PRIV_F2_PDB (2 * sizeof(u32) + 7 * caam_ptr_sz) 56462306a36Sopenharmony_ci 56562306a36Sopenharmony_ci/** 56662306a36Sopenharmony_ci * RSA Decrypt PDB - Private Key Form #3 56762306a36Sopenharmony_ci * This is the RSA Chinese Reminder Theorem (CRT) form for two prime factors of 56862306a36Sopenharmony_ci * the RSA modulus. 56962306a36Sopenharmony_ci * @sgf : scatter-gather field 57062306a36Sopenharmony_ci * @g_dma : dma address of encrypted input data 57162306a36Sopenharmony_ci * @f_dma : dma address of output data 57262306a36Sopenharmony_ci * @c_dma : dma address of RSA CRT coefficient 57362306a36Sopenharmony_ci * @p_dma : dma address of RSA prime factor p of RSA modulus n 57462306a36Sopenharmony_ci * @q_dma : dma address of RSA prime factor q of RSA modulus n 57562306a36Sopenharmony_ci * @dp_dma : dma address of RSA CRT exponent of RSA prime factor p 57662306a36Sopenharmony_ci * @dp_dma : dma address of RSA CRT exponent of RSA prime factor q 57762306a36Sopenharmony_ci * @tmp1_dma: dma address of temporary buffer. CAAM uses this temporary buffer 57862306a36Sopenharmony_ci * as internal state buffer. It is assumed to be as long as p. 57962306a36Sopenharmony_ci * @tmp2_dma: dma address of temporary buffer. CAAM uses this temporary buffer 58062306a36Sopenharmony_ci * as internal state buffer. It is assumed to be as long as q. 58162306a36Sopenharmony_ci * @p_q_len : length in bytes of first two prime factors of the RSA modulus n 58262306a36Sopenharmony_ci */ 58362306a36Sopenharmony_cistruct rsa_priv_f3_pdb { 58462306a36Sopenharmony_ci u32 sgf; 58562306a36Sopenharmony_ci dma_addr_t g_dma; 58662306a36Sopenharmony_ci dma_addr_t f_dma; 58762306a36Sopenharmony_ci dma_addr_t c_dma; 58862306a36Sopenharmony_ci dma_addr_t p_dma; 58962306a36Sopenharmony_ci dma_addr_t q_dma; 59062306a36Sopenharmony_ci dma_addr_t dp_dma; 59162306a36Sopenharmony_ci dma_addr_t dq_dma; 59262306a36Sopenharmony_ci dma_addr_t tmp1_dma; 59362306a36Sopenharmony_ci dma_addr_t tmp2_dma; 59462306a36Sopenharmony_ci u32 p_q_len; 59562306a36Sopenharmony_ci}; 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ci#define SIZEOF_RSA_PRIV_F3_PDB (2 * sizeof(u32) + 9 * caam_ptr_sz) 59862306a36Sopenharmony_ci 59962306a36Sopenharmony_ci#endif 600