Skip to content

Commit

Permalink
Added Os.Path.sha3 and Os.Ext.sha3. Use sireum.jar sha3 when versioni…
Browse files Browse the repository at this point in the history
…ng forms.
  • Loading branch information
robby-phd committed Oct 28, 2024
1 parent d9afb12 commit 01d8ba0
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 12 deletions.
7 changes: 4 additions & 3 deletions library/jvm/src/main/scala/org/sireum/Init.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1260,8 +1260,9 @@ import Init._
val forms = home / "forms"
val formsJar = home / "lib" / "forms.jar"
val ver = formsJar.up / s"${formsJar.name}.ver"
val version = versions.get("org.sireum.version.forms").get
if (ver.exists && ver.read == version) {
val version = s"${versions.get("org.sireum.version.forms").get}"
val versionWithSireum = s"$version-${sireumJar.sha3(8)}"
if (ver.exists && ver.read == versionWithSireum) {
return
}
println("Building forms ...")
Expand All @@ -1272,7 +1273,7 @@ import Init._
proc"$sireum proyek assemble --main org.sireum.forms.FormsApp --exclude-jar-deps asm:,unmanaged:,org.scala-lang: $forms".runCheck()
(forms / "out" / "forms" / "assemble" / "forms.jar").copyOverTo(formsJar)
forms.removeAll()
ver.writeOver(version)
ver.writeOver(versionWithSireum)
println()
}

Expand Down
10 changes: 8 additions & 2 deletions library/jvm/src/main/scala/org/sireum/LibJvmUtil_Ext.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1443,7 +1443,7 @@ class LibJvmUtil_Ext extends Reflection_Ext {
}

private lazy val method1Map: Long2ObjectOpenHashMap[Option[AnyRef] => Any => Any] = {
val r = new Long2ObjectOpenHashMap[Option[AnyRef] => Any => Any](1684)
val r = new Long2ObjectOpenHashMap[Option[AnyRef] => Any => Any](1686)
r.put(0x1854D576D83AF7E4L, _ => (o1: Any) => org.sireum.AssocS.Entries.uniqueKeys(X(o1))) // methodKey(T, "org.sireum.AssocS.Entries", "uniqueKeys").value
r.put(0xE5CBF86C0B8F9696L, _ => (o1: Any) => org.sireum.AssocS.Entries.keys(X(o1))) // methodKey(T, "org.sireum.AssocS.Entries", "keys").value
r.put(0xCEBF203EDC8BD12DL, _ => (o1: Any) => org.sireum.AssocS.Entries.values(X(o1))) // methodKey(T, "org.sireum.AssocS.Entries", "values").value
Expand Down Expand Up @@ -3271,6 +3271,7 @@ class LibJvmUtil_Ext extends Reflection_Ext {
r.put(0x21DEF52BDAEFFE47L, r => (o1: Any) => X[org.sireum.Os.Path.Impl](r).mklink(X(o1))) // methodKey(F, "org.sireum.Os.Path.Impl", "mklink").value
r.put(0x4D1118DA7AD477C9L, r => (o1: Any) => X[org.sireum.Os.Path.Impl](r).prependWith(X(o1))) // methodKey(F, "org.sireum.Os.Path.Impl", "prependWith").value
r.put(0x177BD36757FFA2FCL, r => (o1: Any) => X[org.sireum.Os.Path.Impl](r).relativize(X(o1))) // methodKey(F, "org.sireum.Os.Path.Impl", "relativize").value
r.put(0x08F2E776D999DC16L, r => (o1: Any) => X[org.sireum.Os.Path.Impl](r).sha3(X(o1))) // methodKey(F, "org.sireum.Os.Path.Impl", "sha3").value
r.put(0xE623FA9514DF669CL, r => (o1: Any) => X[org.sireum.Os.Path.Impl](r).setLastModified(X(o1))) // methodKey(F, "org.sireum.Os.Path.Impl", "setLastModified").value
r.put(0x4087B80DA941BE05L, r => (o1: Any) => X[org.sireum.Os.Path.Impl](r).slash(X(o1))) // methodKey(F, "org.sireum.Os.Path.Impl", "slash").value
r.put(0xBC5E847DF4333665L, r => (o1: Any) => X[org.sireum.Os.Path.Impl](r).write(X(o1))) // methodKey(F, "org.sireum.Os.Path.Impl", "write").value
Expand Down Expand Up @@ -3396,6 +3397,7 @@ class LibJvmUtil_Ext extends Reflection_Ext {
r.put(0xA6BA777B1FBE47B4L, r => (o1: Any) => X[org.sireum.Os.Path](r).mklink(X(o1))) // methodKey(F, "org.sireum.Os.Path", "mklink").value
r.put(0x0879FE2B2FB52FF4L, r => (o1: Any) => X[org.sireum.Os.Path](r).prependWith(X(o1))) // methodKey(F, "org.sireum.Os.Path", "prependWith").value
r.put(0x96414EBF95277030L, r => (o1: Any) => X[org.sireum.Os.Path](r).relativize(X(o1))) // methodKey(F, "org.sireum.Os.Path", "relativize").value
r.put(0x8EC4D0DCFE2665B0L, r => (o1: Any) => X[org.sireum.Os.Path](r).sha3(X(o1))) // methodKey(F, "org.sireum.Os.Path", "sha3").value
r.put(0x5A9B1076C58EEB72L, r => (o1: Any) => X[org.sireum.Os.Path](r).setLastModified(X(o1))) // methodKey(F, "org.sireum.Os.Path", "setLastModified").value
r.put(0xA1348253E3A5B1E3L, r => (o1: Any) => X[org.sireum.Os.Path](r).slash(X(o1))) // methodKey(F, "org.sireum.Os.Path", "slash").value
r.put(0xDC4DB49A09541247L, r => (o1: Any) => X[org.sireum.Os.Path](r).write(X(o1))) // methodKey(F, "org.sireum.Os.Path", "write").value
Expand Down Expand Up @@ -3432,7 +3434,7 @@ class LibJvmUtil_Ext extends Reflection_Ext {
}

private lazy val method2Map: Long2ObjectOpenHashMap[Option[AnyRef] => Any => Any => Any] = {
val r = new Long2ObjectOpenHashMap[Option[AnyRef] => Any => Any => Any](328)
val r = new Long2ObjectOpenHashMap[Option[AnyRef] => Any => Any => Any](329)
r.put(0x4D89D302473509F8L, _ => (o1: Any) => (o2: Any) => org.sireum.AssocS.Entries.contain(X(o1), X(o2))) // methodKey(T, "org.sireum.AssocS.Entries", "contain").value
r.put(0x178633CC914B88ACL, _ => (o1: Any) => (o2: Any) => org.sireum.AssocS.Entries.containKey(X(o1), X(o2))) // methodKey(T, "org.sireum.AssocS.Entries", "containKey").value
r.put(0x4E5075BEB3306304L, _ => (o1: Any) => (o2: Any) => org.sireum.AssocS.Entries.containValue(X(o1), X(o2))) // methodKey(T, "org.sireum.AssocS.Entries", "containValue").value
Expand Down Expand Up @@ -3538,6 +3540,7 @@ class LibJvmUtil_Ext extends Reflection_Ext {
r.put(0x601C666A8F930DA3L, _ => (o1: Any) => (o2: Any) => org.sireum.Os.Ext.mkdir(X(o1), X(o2))) // methodKey(T, "org.sireum.Os.Ext", "mkdir").value
r.put(0xC0EEB8B2898E63D2L, _ => (o1: Any) => (o2: Any) => org.sireum.Os.Ext.mklink(X(o1), X(o2))) // methodKey(T, "org.sireum.Os.Ext", "mklink").value
r.put(0xB82E01BF2363E5BBL, _ => (o1: Any) => (o2: Any) => org.sireum.Os.Ext.relativize(X(o1), X(o2))) // methodKey(T, "org.sireum.Os.Ext", "relativize").value
r.put(0x40EF2D61504D6B3DL, _ => (o1: Any) => (o2: Any) => org.sireum.Os.Ext.sha3(X(o1), X(o2))) // methodKey(T, "org.sireum.Os.Ext", "sha3").value
r.put(0xB393AE71E3606377L, _ => (o1: Any) => (o2: Any) => org.sireum.Os.Ext.setLastModified(X(o1), X(o2))) // methodKey(T, "org.sireum.Os.Ext", "setLastModified").value
r.put(0x384F977029B938BAL, _ => (o1: Any) => (o2: Any) => org.sireum.Os.Ext.temp(X(o1), X(o2))) // methodKey(T, "org.sireum.Os.Ext", "temp").value
r.put(0x837B0EC490F1849CL, _ => (o1: Any) => (o2: Any) => org.sireum.Os.Ext.zip(X(o1), X(o2))) // methodKey(T, "org.sireum.Os.Ext", "zip").value
Expand Down Expand Up @@ -5092,6 +5095,7 @@ class LibJvmUtil_Ext extends Reflection_Ext {
Method(isInObject = true, isByName = F, name = "removeAll", params = ISZ("path")),
Method(isInObject = true, isByName = F, name = "removeOnExit", params = ISZ("path")),
Method(isInObject = true, isByName = F, name = "sha1", params = ISZ("path")),
Method(isInObject = true, isByName = F, name = "sha3", params = ISZ("path", "numOfBytes")),
Method(isInObject = true, isByName = F, name = "setLastModified", params = ISZ("path", "millis")),
Method(isInObject = true, isByName = T, name = "slashDir", params = ISZ()),
Method(isInObject = true, isByName = F, name = "size", params = ISZ("path")),
Expand Down Expand Up @@ -8301,6 +8305,7 @@ class LibJvmUtil_Ext extends Reflection_Ext {
Method(isInObject = false, isByName = F, name = "removeAll", params = ISZ()),
Method(isInObject = false, isByName = F, name = "removeOnExit", params = ISZ()),
Method(isInObject = false, isByName = T, name = "sha1", params = ISZ()),
Method(isInObject = false, isByName = F, name = "sha3", params = ISZ("numOfBytes")),
Method(isInObject = false, isByName = F, name = "setLastModified", params = ISZ("millis")),
Method(isInObject = false, isByName = T, name = "size", params = ISZ()),
Method(isInObject = false, isByName = F, name = "slash", params = ISZ("args")),
Expand Down Expand Up @@ -8594,6 +8599,7 @@ class LibJvmUtil_Ext extends Reflection_Ext {
Method(isInObject = false, isByName = F, name = "removeAll", params = ISZ()),
Method(isInObject = false, isByName = F, name = "removeOnExit", params = ISZ()),
Method(isInObject = false, isByName = T, name = "sha1", params = ISZ()),
Method(isInObject = false, isByName = F, name = "sha3", params = ISZ("numOfBytes")),
Method(isInObject = false, isByName = F, name = "setLastModified", params = ISZ("millis")),
Method(isInObject = false, isByName = T, name = "size", params = ISZ()),
Method(isInObject = false, isByName = F, name = "slash", params = ISZ("args")),
Expand Down
6 changes: 6 additions & 0 deletions library/jvm/src/main/scala/org/sireum/Os.scala
Original file line number Diff line number Diff line change
Expand Up @@ -767,6 +767,10 @@ object Os {
return Ext.sha1(value)
}

def sha3(numOfBytes: Z): String = {
return Ext.sha3(value, numOfBytes)
}

def setLastModified(millis: Z): Unit = {
Ext.setLastModified(value, millis)
}
Expand Down Expand Up @@ -1071,6 +1075,8 @@ object Os {

def sha1(path: String): String = $

def sha3(path: String, numOfBytes: Z): String = $

def setLastModified(path: String, millis: Z): Unit = $

@pure def slashDir: String = $
Expand Down
11 changes: 7 additions & 4 deletions library/jvm/src/main/scala/org/sireum/Os_Ext.scala
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ object Os_Ext {
}
}

def md5(path: String): String = digest(path, "MD5")
def md5(path: String): String = digest(path, "MD5", 0)

def move(path: String, target: String, over: B): Unit = {
val p = toNIO(path)
Expand Down Expand Up @@ -701,7 +701,9 @@ object Os_Ext {
case _: Throwable =>
}

def sha1(path: String): String = digest(path, "SHA1")
def sha1(path: String): String = digest(path, "SHA1", 0)

def sha3(path: String, numOfBytes: Z): String = digest(path, "SHA3-512", numOfBytes)

def slashDir: String = {
try if (isNative) return parent(Class.forName("org.graalvm.nativeimage.ProcessProperties").
Expand Down Expand Up @@ -1228,10 +1230,11 @@ object Os_Ext {

def size(path: String): Z = toIO(path).length

private def digest(path: String, name: String): String = {
private def digest(path: String, name: String, numOfBytes: Z): String = {
val md = java.security.MessageDigest.getInstance(name.value)
val digest = md.digest(readU8s(path).elements.map(_.value).toArray)
st"${(for (d <- digest) yield U8(d)).toSeq}".render.value.toLowerCase
val s = ISZ((for (d <- digest) yield U8(d)).toSeq: _*)
st"${if (numOfBytes > 0) Jen.IS(s).take(numOfBytes).toISZ else s}".render.value.toLowerCase
}

private def toIO(path: String): JFile = new JFile(path.value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -326,9 +326,7 @@ import DependencyManager._
p.removeAll()
p.downloadFrom(dep)
println()
val sha3 = crypto.SHA3.init512
sha3.update(p.readU8s)
val version = st"${Jen.IS(sha3.finalise()).take(8).toISZ}".render
val version = p.sha3(8)
val pv = p.up.canon / st"${ops.StringOps(p.name).substring(0, p.name.size - 4)}-$version.jar".render
p.moveOverTo(pv)
return (Some(pv), version)
Expand Down

0 comments on commit 01d8ba0

Please sign in to comment.