Skip to content

Commit

Permalink
[PPML] Implement verifyQuote in QuoteVerifier.scala (intel-analytics#…
Browse files Browse the repository at this point in the history
…5495)

* Add SGXDCAMQuoteVerifierImpl in for QuoteVerifier
* Add unit test for SGXDCAPQuoteVerifierImpl
* Move attestation.Attestation to dcap.Attestation
  • Loading branch information
xiangyuT authored and ForJadeForest committed Sep 20, 2022
1 parent 8f87834 commit 404a452
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Copyright 2016 The BigDL Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.intel.analytics.bigdl.ppml.attestation

import com.intel.analytics.bigdl.ppml.dcap.Attestation
import org.apache.logging.log4j.LogManager

/**
* Verify SGX quote with SGX SDK
*/
class SGXDCAPQuoteVerifierImpl extends QuoteVerifier with Serializable {
val logger = LogManager.getLogger(getClass)

@throws(classOf[AttestationRuntimeException])
override def verifyQuote(quote: Array[Byte]): Int = {

try {
val verifyQuoteResult = Attestation.sdkVerifyQuote(quote)
return verifyQuoteResult
} catch {
case e: Exception =>
logger.error(s"Failed to verify quote, ${e}")
throw new AttestationRuntimeException("Failed " +
"to verify quote", e)
}

throw new AttestationRuntimeException("Unexpected workflow when verifying Quote!")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* Copyright 2016 The BigDL Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.intel.analytics.bigdl.ppml.attestation

import com.intel.analytics.bigdl.dllib.common.zooUtils
import java.io.{BufferedOutputStream, BufferedInputStream};
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.logging.log4j.LogManager
import org.scalatest.{FlatSpec, Matchers}
import scala.io.Source
import scala.language.postfixOps
import sys.env
import sys.process._

class SGXDCAPQuoteVerifierImplSpec extends FlatSpec with Matchers {

val logger = LogManager.getLogger(getClass)
var tmpDir: File = _
val sGXDCAPQuoteVerifierImplSpec = new SGXDCAPQuoteVerifierImpl()

val quoteUrl = if (env.contains("FTP_URI")) {
env("FTP_URI").toString
}

tmpDir = zooUtils.createTmpDir("ZooPPML").toFile()
val dir = new File(s"${tmpDir.getAbsolutePath}/SGXDCAPQuoteVerifierImplSpec").getCanonicalPath
s"wget -nv -P $dir $quoteUrl" !;
val quotePath = s"$dir/sgxdcap_quote.dat"

// SGXDCAPQuoteVerifierImplSpec
"SGX DCAP verify Quote " should "work" in {
val quoteFile = new File(quotePath)
val in = new FileInputStream(quoteFile)
val bufIn = new BufferedInputStream(in)
val quote = Iterator.continually(bufIn.read()).takeWhile(_ != -1).map(_.toByte).toArray
bufIn.close()
in.close()
logger.info(quote)
val verifyQuoteResult = sGXDCAPQuoteVerifierImplSpec.verifyQuote(quote)
verifyQuoteResult shouldNot equal(-1)
logger.info(verifyQuoteResult)
}
}

0 comments on commit 404a452

Please sign in to comment.