Support multiple mrEnclave values for consensus.

This commit is contained in:
Matthew Chen 2021-05-25 16:19:41 -03:00
parent b953104659
commit 0620651111

View File

@ -177,6 +177,7 @@ extension MobileCoinAPI {
private enum AttestationType {
case mrSigner(mrSignerData: Data)
case mrEnclave(mrEnclaveData: Data)
case mrEnclaves(mrEnclaveDatas: [Data])
case mrSignerAndMrEnclave(mrSignerData: Data, mrEnclaveData: Data)
}
@ -219,6 +220,14 @@ extension MobileCoinAPI {
}
}
private static func buildMrEnclaves(mrEnclaveDatas: [Data],
attestationInfo: AttestationInfo) throws -> [MobileCoin.Attestation.MrEnclave] {
try mrEnclaveDatas.map {
try buildMrEnclave(mrEnclaveData: $0,
attestationInfo: attestationInfo)
}
}
private static func buildAttestation(attestationType: AttestationType,
attestationInfo: AttestationInfo) throws -> MobileCoin.Attestation {
switch attestationType {
@ -230,6 +239,10 @@ extension MobileCoinAPI {
let mrEnclave = try buildMrEnclave(mrEnclaveData: mrEnclaveData,
attestationInfo: attestationInfo)
return MobileCoin.Attestation(mrEnclaves: [mrEnclave])
case .mrEnclaves(let mrEnclaveDatas):
let mrEnclaves = try buildMrEnclaves(mrEnclaveDatas: mrEnclaveDatas,
attestationInfo: attestationInfo)
return MobileCoin.Attestation(mrEnclaves: mrEnclaves)
case .mrSignerAndMrEnclave(let mrSignerData, let mrEnclaveData):
let mrSigner = try buildMrSigner(mrSignerData: mrSignerData,
attestationInfo: attestationInfo)
@ -256,14 +269,14 @@ extension MobileCoinAPI {
}
}
private static func buildAttestationConfig(mrEnclaveConsensus: Data,
private static func buildAttestationConfig(mrEnclaveConsensus: [Data],
mrEnclaveFogView: Data,
mrEnclaveFogKeyImage: Data,
mrEnclaveFogMerkleProof: Data,
mrEnclaveFogReport: Data) -> OWSAttestationConfig {
do {
return OWSAttestationConfig(
consensus: try buildAttestation(attestationType: .mrEnclave(mrEnclaveData: mrEnclaveConsensus),
consensus: try buildAttestation(attestationType: .mrEnclaves(mrEnclaveDatas: mrEnclaveConsensus),
attestationInfo: .consensus),
fogView: try buildAttestation(attestationType: .mrEnclave(mrEnclaveData: mrEnclaveFogView),
attestationInfo: .fogView),
@ -289,7 +302,7 @@ extension MobileCoinAPI {
let mrEnclaveFogView = Data.data(fromHex: "ddd59da874fdf3239d5edb1ef251df07a8728c9ef63057dd0b50ade5a9ddb041")!
let mrEnclaveFogReport = Data.data(fromHex: "709ab90621e3a8d9eb26ed9e2830e091beceebd55fb01c5d7c31d27e83b9b0d1")!
let mrEnclaveFogLedger = Data.data(fromHex: "511eab36de691ded50eb08b173304194da8b9d86bfdd7102001fe6bb279c3666")!
return buildAttestationConfig(mrEnclaveConsensus: mrEnclaveConsensus,
return buildAttestationConfig(mrEnclaveConsensus: [mrEnclaveConsensus],
mrEnclaveFogView: mrEnclaveFogView,
mrEnclaveFogKeyImage: mrEnclaveFogLedger,
mrEnclaveFogMerkleProof: mrEnclaveFogLedger,
@ -302,7 +315,10 @@ extension MobileCoinAPI {
}
static var signalTestNet: OWSAttestationConfig {
let mrEnclaveConsensus = Data.data(fromHex: "3dc0c6b273ca16c50d3d94d6e1042998980cf977a79521c6d87366cddc70db03")!
let mrEnclaveConsensus = [
Data.data(fromHex: "9268c3220a5260e51e4b586f00e4677fed2b80380f1eeaf775af60f8e880fde8")!,
Data.data(fromHex: "3dc0c6b273ca16c50d3d94d6e1042998980cf977a79521c6d87366cddc70db03")!
]
let mrEnclaveFogView = Data.data(fromHex: "4e598799faa4bb08a3bd55c0bcda7e1d22e41151d0c591f6c2a48b3562b0881e")!
let mrEnclaveFogReport = Data.data(fromHex: "185875464ccd67a879d58181055383505a719b364b12d56d9bef90a40bed07ca")!
let mrEnclaveFogLedger = Data.data(fromHex: "7330c9987f21b91313b39dcdeaa7da8da5ca101c929f5740c207742c762e6dcd")!