blob: 5dce22b4abb635c2463a1a646c9f98a1d5d0d8c8 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build java android
package security
import (
"fmt"
"v.io/v23/security"
jutil "v.io/x/jni/util"
jcontext "v.io/x/jni/v23/context"
vsecurity "v.io/x/ref/lib/security"
)
// #include "jni.h"
import "C"
var (
dischargeSign = jutil.ClassSign("io.v.v23.security.Discharge")
dischargeImpetusSign = jutil.ClassSign("io.v.v23.security.DischargeImpetus")
principalSign = jutil.ClassSign("io.v.v23.security.VPrincipal")
blessingsSign = jutil.ClassSign("io.v.v23.security.Blessings")
wireBlessingsSign = jutil.ClassSign("io.v.v23.security.WireBlessings")
wireDischargeSign = jutil.ClassSign("io.v.v23.security.WireDischarge")
blessingStoreSign = jutil.ClassSign("io.v.v23.security.BlessingStore")
blessingRootsSign = jutil.ClassSign("io.v.v23.security.BlessingRoots")
blessingPatternSign = jutil.ClassSign("io.v.v23.security.BlessingPattern")
signerSign = jutil.ClassSign("io.v.v23.security.VSigner")
caveatSign = jutil.ClassSign("io.v.v23.security.Caveat")
contextSign = jutil.ClassSign("io.v.v23.context.VContext")
callSign = jutil.ClassSign("io.v.v23.security.Call")
signatureSign = jutil.ClassSign("io.v.v23.security.VSignature")
publicKeySign = jutil.ClassSign("java.security.interfaces.ECPublicKey")
// Global reference for io.v.v23.security.Blessings class.
jBlessingsClass C.jclass
// Global reference for io.v.v23.security.Caveat class.
jCaveatClass C.jclass
// Global reference for io.v.v23.security.WireBlessings class.
jWireBlessingsClass C.jclass
// Global reference for io.v.v23.security.VPrincipalImpl class.
jVPrincipalImplClass C.jclass
// Global reference for io.v.v23.security.BlessingStoreImpl class.
jBlessingStoreImplClass C.jclass
// Global reference for io.v.v23.security.BlessingRootsImpl class.
jBlessingRootsImplClass C.jclass
// Global reference for io.v.v23.security.CallImpl class.
jCallImplClass C.jclass
// Global reference for io.v.v23.security.BlessingPattern class.
jBlessingPatternClass C.jclass
// Global reference for io.v.v23.security.CaveatRegistry class.
jCaveatRegistryClass C.jclass
// Global reference for io.v.v23.security.Util class.
jUtilClass C.jclass
// Global reference for java.lang.Object class.
jObjectClass C.jclass
// Global reference for io.v.v23.security.VSecurity class.
jVSecurityClass C.jclass
// Global reference for io.v.v23.security.Discharge class.
jDischargeClass C.jclass
// Global reference for io.v.v23.security.DischargeImpetus class.
jDischargeImpetusClass C.jclass
)
// Init initializes the JNI code with the given Java evironment. This method
// must be called from the main Java thread.
// NOTE: Because CGO creates package-local types and because this method may be
// invoked from a different package, Java environment is passed in an empty
// interface and then cast into the package-local environment type.
func Init(jEnv interface{}) error {
security.OverrideCaveatValidation(caveatValidator)
// Cache global references to all Java classes used by the package. This is
// necessary because JNI gets access to the class loader only in the system
// thread, so we aren't able to invoke FindClass in other threads.
class, err := jutil.JFindClass(jEnv, "io/v/v23/security/Blessings")
if err != nil {
return err
}
jBlessingsClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/Caveat")
if err != nil {
return err
}
jCaveatClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/WireBlessings")
if err != nil {
return err
}
jWireBlessingsClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/VPrincipalImpl")
if err != nil {
return err
}
jVPrincipalImplClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/BlessingStoreImpl")
if err != nil {
return err
}
jBlessingStoreImplClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/BlessingRootsImpl")
if err != nil {
return err
}
jBlessingRootsImplClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/CallImpl")
if err != nil {
return err
}
jCallImplClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/BlessingPattern")
if err != nil {
return err
}
jBlessingPatternClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/CaveatRegistry")
if err != nil {
return err
}
jCaveatRegistryClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/Util")
if err != nil {
return err
}
jUtilClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "java/lang/Object")
if err != nil {
return err
}
jObjectClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/VSecurity")
if err != nil {
return err
}
jVSecurityClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/Discharge")
if err != nil {
return err
}
jDischargeClass = C.jclass(class)
class, err = jutil.JFindClass(jEnv, "io/v/v23/security/DischargeImpetus")
if err != nil {
return err
}
jDischargeImpetusClass = C.jclass(class)
return nil
}
//export Java_io_v_v23_security_CallImpl_nativeTimestamp
func Java_io_v_v23_security_CallImpl_nativeTimestamp(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jobject {
t := (*(*security.Call)(jutil.Ptr(goPtr))).Timestamp()
jTime, err := jutil.JTime(env, t)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jTime)
}
//export Java_io_v_v23_security_CallImpl_nativeMethod
func Java_io_v_v23_security_CallImpl_nativeMethod(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jstring {
method := (*(*security.Call)(jutil.Ptr(goPtr))).Method()
return C.jstring(jutil.JString(env, jutil.CamelCase(method)))
}
//export Java_io_v_v23_security_CallImpl_nativeMethodTags
func Java_io_v_v23_security_CallImpl_nativeMethodTags(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jobjectArray {
tags := (*(*security.Call)(jutil.Ptr(goPtr))).MethodTags()
jTags, err := jutil.JVDLValueArray(env, tags)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobjectArray(jTags)
}
//export Java_io_v_v23_security_CallImpl_nativeSuffix
func Java_io_v_v23_security_CallImpl_nativeSuffix(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jstring {
return C.jstring(jutil.JString(env, (*(*security.Call)(jutil.Ptr(goPtr))).Suffix()))
}
//export Java_io_v_v23_security_CallImpl_nativeRemoteDischarges
func Java_io_v_v23_security_CallImpl_nativeRemoteDischarges(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jobject {
remoteDischarges := (*(*security.Call)(jutil.Ptr(goPtr))).RemoteDischarges()
jObjectMap, err := javaDischargeMap(env, remoteDischarges)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return jObjectMap
}
//export Java_io_v_v23_security_CallImpl_nativeLocalDischarges
func Java_io_v_v23_security_CallImpl_nativeLocalDischarges(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jobject {
localDischarges := (*(*security.Call)(jutil.Ptr(goPtr))).LocalDischarges()
jObjectMap, err := javaDischargeMap(env, localDischarges)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return jObjectMap
}
//export Java_io_v_v23_security_CallImpl_nativeLocalEndpoint
func Java_io_v_v23_security_CallImpl_nativeLocalEndpoint(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jstring {
return C.jstring(jutil.JString(env, (*(*security.Call)(jutil.Ptr(goPtr))).LocalEndpoint().String()))
}
//export Java_io_v_v23_security_CallImpl_nativeRemoteEndpoint
func Java_io_v_v23_security_CallImpl_nativeRemoteEndpoint(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jstring {
return C.jstring(jutil.JString(env, (*(*security.Call)(jutil.Ptr(goPtr))).RemoteEndpoint().String()))
}
//export Java_io_v_v23_security_CallImpl_nativeLocalPrincipal
func Java_io_v_v23_security_CallImpl_nativeLocalPrincipal(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jobject {
principal := (*(*security.Call)(jutil.Ptr(goPtr))).LocalPrincipal()
jPrincipal, err := JavaPrincipal(env, principal)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jPrincipal)
}
//export Java_io_v_v23_security_CallImpl_nativeLocalBlessings
func Java_io_v_v23_security_CallImpl_nativeLocalBlessings(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jobject {
blessings := (*(*security.Call)(jutil.Ptr(goPtr))).LocalBlessings()
jBlessings, err := JavaBlessings(env, blessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jBlessings)
}
//export Java_io_v_v23_security_CallImpl_nativeRemoteBlessings
func Java_io_v_v23_security_CallImpl_nativeRemoteBlessings(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) C.jobject {
blessings := (*(*security.Call)(jutil.Ptr(goPtr))).RemoteBlessings()
jBlessings, err := JavaBlessings(env, blessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jBlessings)
}
//export Java_io_v_v23_security_CallImpl_nativeFinalize
func Java_io_v_v23_security_CallImpl_nativeFinalize(env *C.JNIEnv, jCall C.jobject, goPtr C.jlong) {
jutil.GoUnref(jutil.Ptr(goPtr))
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeCreate
func Java_io_v_v23_security_VPrincipalImpl_nativeCreate(env *C.JNIEnv, jVPrincipalImplClass C.jclass) C.jobject {
principal, err := vsecurity.NewPrincipal()
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jPrincipal, err := JavaPrincipal(env, principal)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jPrincipal)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeCreateForSigner
func Java_io_v_v23_security_VPrincipalImpl_nativeCreateForSigner(env *C.JNIEnv, jVPrincipalImplClass C.jclass, jSigner C.jobject) C.jobject {
signer, err := GoSigner(env, jSigner)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
principal, err := vsecurity.NewPrincipalFromSigner(signer, nil)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jPrincipal, err := jutil.NewObject(env, jVPrincipalImplClass, []jutil.Sign{jutil.LongSign, signerSign, blessingStoreSign, blessingRootsSign}, &principal, jSigner, C.jobject(nil), C.jobject(nil))
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jutil.GoRef(&principal) // Un-refed when the Java VPrincipalImpl is finalized.
return C.jobject(jPrincipal)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeCreateForAll
func Java_io_v_v23_security_VPrincipalImpl_nativeCreateForAll(env *C.JNIEnv, jVPrincipalImplClass C.jclass, jSigner C.jobject, jStore C.jobject, jRoots C.jobject) C.jobject {
signer, err := GoSigner(env, jSigner)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
store, err := GoBlessingStore(env, jStore)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
roots, err := GoBlessingRoots(env, jRoots)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
principal, err := security.CreatePrincipal(signer, store, roots)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jPrincipal, err := jutil.NewObject(env, jVPrincipalImplClass, []jutil.Sign{jutil.LongSign, signerSign, blessingStoreSign, blessingRootsSign}, &principal, jSigner, jStore, jRoots)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jutil.GoRef(&principal) // Un-refed when the Java VPrincipalImpl is finalized.
return C.jobject(jPrincipal)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeCreatePersistent
func Java_io_v_v23_security_VPrincipalImpl_nativeCreatePersistent(env *C.JNIEnv, jVPrincipalImplClass C.jclass, jPassphrase C.jstring, jDir C.jstring) C.jobject {
passphrase := jutil.GoString(env, jPassphrase)
dir := jutil.GoString(env, jDir)
principal, err := vsecurity.LoadPersistentPrincipal(dir, []byte(passphrase))
if err != nil {
if principal, err = vsecurity.CreatePersistentPrincipal(dir, []byte(passphrase)); err != nil {
jutil.JThrowV(env, err)
return nil
}
}
jPrincipal, err := JavaPrincipal(env, principal)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jPrincipal)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeCreatePersistentForSigner
func Java_io_v_v23_security_VPrincipalImpl_nativeCreatePersistentForSigner(env *C.JNIEnv, jVPrincipalImplClass C.jclass, jSigner C.jobject, jDir C.jstring) C.jobject {
signer, err := GoSigner(env, jSigner)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
dir := jutil.GoString(env, jDir)
stateSerializer, err := vsecurity.NewPrincipalStateSerializer(dir)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
principal, err := vsecurity.NewPrincipalFromSigner(signer, stateSerializer)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jPrincipal, err := jutil.NewObject(env, jVPrincipalImplClass, []jutil.Sign{jutil.LongSign, signerSign, blessingStoreSign, blessingRootsSign}, &principal, jSigner, C.jobject(nil), C.jobject(nil))
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jutil.GoRef(&principal) // Un-refed when the Java VPrincipalImpl is finalized.
return C.jobject(jPrincipal)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeBless
func Java_io_v_v23_security_VPrincipalImpl_nativeBless(env *C.JNIEnv, jVPrincipalImpl C.jobject, goPtr C.jlong, jKey C.jobject, jWith C.jobject, jExtension C.jstring, jCaveat C.jobject, jAdditionalCaveats C.jobjectArray) C.jobject {
key, err := GoPublicKey(env, jKey)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
with, err := GoBlessings(env, jWith)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
extension := jutil.GoString(env, jExtension)
caveat, err := GoCaveat(env, jCaveat)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
additionalCaveats, err := GoCaveats(env, jAdditionalCaveats)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
blessings, err := (*(*security.Principal)(jutil.Ptr(goPtr))).Bless(key, with, extension, caveat, additionalCaveats...)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jBlessings, err := JavaBlessings(env, blessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jBlessings)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeBlessSelf
func Java_io_v_v23_security_VPrincipalImpl_nativeBlessSelf(env *C.JNIEnv, jVPrincipalImpl C.jobject, goPtr C.jlong, jName C.jstring, jCaveats C.jobjectArray) C.jobject {
name := jutil.GoString(env, jName)
caveats, err := GoCaveats(env, jCaveats)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
blessings, err := (*(*security.Principal)(jutil.Ptr(goPtr))).BlessSelf(name, caveats...)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jBlessings, err := JavaBlessings(env, blessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jBlessings)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeSign
func Java_io_v_v23_security_VPrincipalImpl_nativeSign(env *C.JNIEnv, jVPrincipalImpl C.jobject, goPtr C.jlong, jMessage C.jbyteArray) C.jobject {
message := jutil.GoByteArray(env, jMessage)
sig, err := (*(*security.Principal)(jutil.Ptr(goPtr))).Sign(message)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jSig, err := JavaSignature(env, sig)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jSig)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativePublicKey
func Java_io_v_v23_security_VPrincipalImpl_nativePublicKey(env *C.JNIEnv, jVPrincipalImpl C.jobject, goPtr C.jlong) C.jobject {
key := (*(*security.Principal)(jutil.Ptr(goPtr))).PublicKey()
jKey, err := JavaPublicKey(env, key)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jKey)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeBlessingsByName
func Java_io_v_v23_security_VPrincipalImpl_nativeBlessingsByName(env *C.JNIEnv, jVPrincipalImpl C.jobject, goPtr C.jlong, jPattern C.jobject) C.jobjectArray {
pattern, err := GoBlessingPattern(env, jPattern)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
blessings := (*(*security.Principal)(jutil.Ptr(goPtr))).BlessingsByName(pattern)
barr := make([]interface{}, len(blessings))
for i, b := range blessings {
var err error
if barr[i], err = JavaBlessings(env, b); err != nil {
jutil.JThrowV(env, err)
return nil
}
}
return C.jobjectArray(jutil.JObjectArray(env, barr, jBlessingsClass))
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeBlessingsInfo
func Java_io_v_v23_security_VPrincipalImpl_nativeBlessingsInfo(env *C.JNIEnv, jPrincipalImpl C.jobject, goPtr C.jlong, jBlessings C.jobject) C.jobject {
blessings, err := GoBlessings(env, jBlessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
info := (*(*security.Principal)(jutil.Ptr(goPtr))).BlessingsInfo(blessings)
infomap := make(map[interface{}]interface{})
for name, caveats := range info {
jName := jutil.JString(env, name)
jCaveatArray, err := JavaCaveats(env, caveats)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
infomap[jName] = jCaveatArray
}
jInfo, err := jutil.JObjectMap(env, infomap)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jInfo)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeBlessingStore
func Java_io_v_v23_security_VPrincipalImpl_nativeBlessingStore(env *C.JNIEnv, jVPrincipalImpl C.jobject, goPtr C.jlong) C.jobject {
store := (*(*security.Principal)(jutil.Ptr(goPtr))).BlessingStore()
jStore, err := JavaBlessingStore(env, store)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jStore)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeRoots
func Java_io_v_v23_security_VPrincipalImpl_nativeRoots(env *C.JNIEnv, jVPrincipalImpl C.jobject, goPtr C.jlong) C.jobject {
roots := (*(*security.Principal)(jutil.Ptr(goPtr))).Roots()
jRoots, err := JavaBlessingRoots(env, roots)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jRoots)
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeAddToRoots
func Java_io_v_v23_security_VPrincipalImpl_nativeAddToRoots(env *C.JNIEnv, jVPrincipalImpl C.jobject, goPtr C.jlong, jBlessings C.jobject) {
blessings, err := GoBlessings(env, jBlessings)
if err != nil {
jutil.JThrowV(env, err)
return
}
if err := (*(*security.Principal)(jutil.Ptr(goPtr))).AddToRoots(blessings); err != nil {
jutil.JThrowV(env, err)
}
}
//export Java_io_v_v23_security_VPrincipalImpl_nativeFinalize
func Java_io_v_v23_security_VPrincipalImpl_nativeFinalize(env *C.JNIEnv, jVPrincipalImpl C.jobject, goPtr C.jlong) {
jutil.GoUnref(jutil.Ptr(goPtr))
}
//export Java_io_v_v23_security_Blessings_nativeCreate
func Java_io_v_v23_security_Blessings_nativeCreate(env *C.JNIEnv, jBlessingsClass C.jclass, jWire C.jobject) C.jobject {
var blessings security.Blessings
if err := jutil.GoVomCopy(env, jWire, jWireBlessingsClass, &blessings); err != nil {
jutil.JThrowV(env, err)
return nil
}
jBlessings, err := JavaBlessings(env, blessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jBlessings)
}
//export Java_io_v_v23_security_Blessings_nativeCreateUnion
func Java_io_v_v23_security_Blessings_nativeCreateUnion(env *C.JNIEnv, jBlessingsClass C.jclass, jBlessingsArr C.jobjectArray) C.jobject {
blessingsArr, err := GoBlessingsArray(env, jBlessingsArr)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
blessings, err := security.UnionOfBlessings(blessingsArr...)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jBlessings, err := JavaBlessings(env, blessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jBlessings)
}
//export Java_io_v_v23_security_Blessings_nativePublicKey
func Java_io_v_v23_security_Blessings_nativePublicKey(env *C.JNIEnv, jBlessings C.jobject, goPtr C.jlong) C.jobject {
key := (*(*security.Blessings)(jutil.Ptr(goPtr))).PublicKey()
jPublicKey, err := JavaPublicKey(env, key)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jPublicKey)
}
//export Java_io_v_v23_security_Blessings_nativeFinalize
func Java_io_v_v23_security_Blessings_nativeFinalize(env *C.JNIEnv, jBlessings C.jobject, goPtr C.jlong) {
jutil.GoUnref(jutil.Ptr(goPtr))
}
//export Java_io_v_v23_security_BlessingRootsImpl_nativeAdd
func Java_io_v_v23_security_BlessingRootsImpl_nativeAdd(env *C.JNIEnv, jBlessingRootsImpl C.jobject, goPtr C.jlong, jRoot C.jobject, jPattern C.jobject) {
root, err := GoPublicKey(env, jRoot)
if err != nil {
jutil.JThrowV(env, err)
return
}
pattern, err := GoBlessingPattern(env, jPattern)
if err != nil {
jutil.JThrowV(env, err)
return
}
if err := (*(*security.BlessingRoots)(jutil.Ptr(goPtr))).Add(root, pattern); err != nil {
jutil.JThrowV(env, err)
return
}
}
//export Java_io_v_v23_security_BlessingRootsImpl_nativeRecognized
func Java_io_v_v23_security_BlessingRootsImpl_nativeRecognized(env *C.JNIEnv, jBlessingRootsImpl C.jobject, goPtr C.jlong, jRoot C.jobject, jBlessing C.jstring) {
root, err := GoPublicKey(env, jRoot)
if err != nil {
jutil.JThrowV(env, err)
return
}
blessing := jutil.GoString(env, jBlessing)
if err := (*(*security.BlessingRoots)(jutil.Ptr(goPtr))).Recognized(root, blessing); err != nil {
jutil.JThrowV(env, err)
}
}
//export Java_io_v_v23_security_BlessingRootsImpl_nativeDebugString
func Java_io_v_v23_security_BlessingRootsImpl_nativeDebugString(env *C.JNIEnv, jBlessingRootsImpl C.jobject, goPtr C.jlong) C.jstring {
debug := (*(*security.BlessingRoots)(jutil.Ptr(goPtr))).DebugString()
return C.jstring(jutil.JString(env, debug))
}
//export Java_io_v_v23_security_BlessingRootsImpl_nativeToString
func Java_io_v_v23_security_BlessingRootsImpl_nativeToString(env *C.JNIEnv, jBlessingRootsImpl C.jobject, goPtr C.jlong) C.jstring {
str := fmt.Sprintf("%v", (*(*security.BlessingRoots)(jutil.Ptr(goPtr))))
return C.jstring(jutil.JString(env, str))
}
//export Java_io_v_v23_security_BlessingRootsImpl_nativeDump
func Java_io_v_v23_security_BlessingRootsImpl_nativeDump(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong) C.jobject {
dump := (*(*security.BlessingRoots)(jutil.Ptr(goPtr))).Dump()
result := make(map[interface{}][]interface{})
for pattern, keys := range dump {
jBlessingPattern, err := JavaBlessingPattern(env, pattern)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jPublicKeys := make([]interface{}, len(keys))
for i, key := range keys {
var err error
if jPublicKeys[i], err = JavaPublicKey(env, key); err != nil {
jutil.JThrowV(env, err)
return nil
}
}
result[jBlessingPattern] = jPublicKeys
}
jMap, err := jutil.JObjectMultimap(env, result)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jMap)
}
//export Java_io_v_v23_security_BlessingRootsImpl_nativeFinalize
func Java_io_v_v23_security_BlessingRootsImpl_nativeFinalize(env *C.JNIEnv, jBlessingRootsImpl C.jobject, goPtr C.jlong) {
jutil.GoUnref(jutil.Ptr(goPtr))
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeSet
func Java_io_v_v23_security_BlessingStoreImpl_nativeSet(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong, jBlessings C.jobject, jForPeers C.jobject) C.jobject {
blessings, err := GoBlessings(env, jBlessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
forPeers, err := GoBlessingPattern(env, jForPeers)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
oldBlessings, err := (*(*security.BlessingStore)(jutil.Ptr(goPtr))).Set(blessings, forPeers)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jOldBlessings, err := JavaBlessings(env, oldBlessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jOldBlessings)
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeForPeer
func Java_io_v_v23_security_BlessingStoreImpl_nativeForPeer(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong, jPeerBlessings C.jobjectArray) C.jobject {
peerBlessings := jutil.GoStringArray(env, jPeerBlessings)
blessings := (*(*security.BlessingStore)(jutil.Ptr(goPtr))).ForPeer(peerBlessings...)
jBlessings, err := JavaBlessings(env, blessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jBlessings)
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeSetDefaultBlessings
func Java_io_v_v23_security_BlessingStoreImpl_nativeSetDefaultBlessings(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong, jBlessings C.jobject) {
blessings, err := GoBlessings(env, jBlessings)
if err != nil {
jutil.JThrowV(env, err)
return
}
if err := (*(*security.BlessingStore)(jutil.Ptr(goPtr))).SetDefault(blessings); err != nil {
jutil.JThrowV(env, err)
}
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeDefaultBlessings
func Java_io_v_v23_security_BlessingStoreImpl_nativeDefaultBlessings(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong) C.jobject {
blessings := (*(*security.BlessingStore)(jutil.Ptr(goPtr))).Default()
jBlessings, err := JavaBlessings(env, blessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jBlessings)
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativePublicKey
func Java_io_v_v23_security_BlessingStoreImpl_nativePublicKey(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong) C.jobject {
key := (*(*security.BlessingStore)(jutil.Ptr(goPtr))).PublicKey()
jKey, err := JavaPublicKey(env, key)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jKey)
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativePeerBlessings
func Java_io_v_v23_security_BlessingStoreImpl_nativePeerBlessings(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong) C.jobject {
blessingsMap := (*(*security.BlessingStore)(jutil.Ptr(goPtr))).PeerBlessings()
bmap := make(map[interface{}]interface{})
for pattern, blessings := range blessingsMap {
jPattern, err := JavaBlessingPattern(env, pattern)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
jBlessings, err := JavaBlessings(env, blessings)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
bmap[jPattern] = jBlessings
}
jBlessingsMap, err := jutil.JObjectMap(env, bmap)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jBlessingsMap)
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeCacheDischarge
func Java_io_v_v23_security_BlessingStoreImpl_nativeCacheDischarge(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong, jDischarge C.jobject, jCaveat C.jobject, jImpetus C.jobject) {
blessingStore := *(*security.BlessingStore)(jutil.Ptr(goPtr))
discharge, err := GoDischarge(env, jDischarge)
if err != nil {
jutil.JThrowV(env, err)
return
}
caveat, err := GoCaveat(env, jCaveat)
if err != nil {
jutil.JThrowV(env, err)
return
}
var impetus security.DischargeImpetus
err = jutil.GoVomCopy(env, jImpetus, jDischargeImpetusClass, &impetus)
if err != nil {
jutil.JThrowV(env, err)
return
}
blessingStore.CacheDischarge(discharge, caveat, impetus)
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeClearDischarges
func Java_io_v_v23_security_BlessingStoreImpl_nativeClearDischarges(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong, jDischarges C.jobject) {
blessingStore := *(*security.BlessingStore)(jutil.Ptr(goPtr))
var discharges []security.Discharge
for _, jDischarge := range jutil.GoObjectArray(env, jDischarges) {
discharge, err := GoDischarge(env, jDischarge)
if err != nil {
jutil.JThrowV(env, err)
return
}
discharges = append(discharges, discharge)
}
blessingStore.ClearDischarges(discharges...)
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeDischarge
func Java_io_v_v23_security_BlessingStoreImpl_nativeDischarge(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong, jCaveat C.jobject, jImpetus C.jobject) C.jobject {
blessingStore := *(*security.BlessingStore)(jutil.Ptr(goPtr))
caveat, err := GoCaveat(env, jCaveat)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
var impetus security.DischargeImpetus
err = jutil.GoVomCopy(env, jImpetus, jDischargeImpetusClass, &impetus)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
discharge := blessingStore.Discharge(caveat, impetus)
jDischarge, err := JavaDischarge(env, discharge)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return jDischarge
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeDebugString
func Java_io_v_v23_security_BlessingStoreImpl_nativeDebugString(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong) C.jstring {
debug := (*(*security.BlessingStore)(jutil.Ptr(goPtr))).DebugString()
return C.jstring(jutil.JString(env, debug))
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeToString
func Java_io_v_v23_security_BlessingStoreImpl_nativeToString(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong) C.jstring {
str := fmt.Sprintf("%s", (*(*security.BlessingStore)(jutil.Ptr(goPtr))))
return C.jstring(jutil.JString(env, str))
}
//export Java_io_v_v23_security_BlessingStoreImpl_nativeFinalize
func Java_io_v_v23_security_BlessingStoreImpl_nativeFinalize(env *C.JNIEnv, jBlessingStoreImpl C.jobject, goPtr C.jlong) {
jutil.GoUnref(jutil.Ptr(goPtr))
}
//export Java_io_v_v23_security_BlessingPattern_nativeCreate
func Java_io_v_v23_security_BlessingPattern_nativeCreate(env *C.JNIEnv, jBlessingPattern C.jobject) C.jlong {
pattern, err := GoBlessingPattern(env, jBlessingPattern)
if err != nil {
jutil.JThrowV(env, err)
return C.jlong(0)
}
jutil.GoRef(&pattern) // Un-refed when the BlessingPattern object is finalized.
return C.jlong(jutil.PtrValue(&pattern))
}
//export Java_io_v_v23_security_BlessingPattern_nativeIsMatchedBy
func Java_io_v_v23_security_BlessingPattern_nativeIsMatchedBy(env *C.JNIEnv, jBlessingPattern C.jobject, goPtr C.jlong, jBlessings C.jobjectArray) C.jboolean {
blessings := jutil.GoStringArray(env, jBlessings)
matched := (*(*security.BlessingPattern)(jutil.Ptr(goPtr))).MatchedBy(blessings...)
if matched {
return C.JNI_TRUE
}
return C.JNI_FALSE
}
//export Java_io_v_v23_security_BlessingPattern_nativeIsValid
func Java_io_v_v23_security_BlessingPattern_nativeIsValid(env *C.JNIEnv, jBlessingPattern C.jobject, goPtr C.jlong) C.jboolean {
valid := (*(*security.BlessingPattern)(jutil.Ptr(goPtr))).IsValid()
if valid {
return C.JNI_TRUE
}
return C.JNI_FALSE
}
//export Java_io_v_v23_security_BlessingPattern_nativeMakeNonExtendable
func Java_io_v_v23_security_BlessingPattern_nativeMakeNonExtendable(env *C.JNIEnv, jBlessingPattern C.jobject, goPtr C.jlong) C.jobject {
pattern := (*(*security.BlessingPattern)(jutil.Ptr(goPtr))).MakeNonExtendable()
jPattern, err := JavaBlessingPattern(env, pattern)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
return C.jobject(jPattern)
}
//export Java_io_v_v23_security_BlessingPattern_nativeFinalize
func Java_io_v_v23_security_BlessingPattern_nativeFinalize(env *C.JNIEnv, jBlessingPattern C.jobject, goPtr C.jlong) {
jutil.GoUnref(jutil.Ptr(goPtr))
}
//export Java_io_v_v23_security_PublicKeyThirdPartyCaveatValidator_nativeValidate
func Java_io_v_v23_security_PublicKeyThirdPartyCaveatValidator_nativeValidate(env *C.JNIEnv, jThirdPartyValidatorClass C.jclass, jContext C.jobject, jCall C.jobject, jCaveatParam C.jobject) {
param, err := jutil.GoVomCopyValue(env, jCaveatParam)
if err != nil {
jutil.JThrowV(env, err)
return
}
ctx, err := jcontext.GoContext(env, jContext)
if err != nil {
jutil.JThrowV(env, err)
return
}
call, err := GoCall(env, jCall)
if err != nil {
jutil.JThrowV(env, err)
return
}
caveat, err := security.NewCaveat(security.PublicKeyThirdPartyCaveat, param)
if err != nil {
jutil.JThrowV(env, err)
return
}
if err := caveat.Validate(ctx, call); err != nil {
jutil.JThrowV(env, err)
}
}
//export Java_io_v_v23_security_VSecurity_nativeGetRemoteBlessingNames
func Java_io_v_v23_security_VSecurity_nativeGetRemoteBlessingNames(env *C.JNIEnv, jVSecurityClass C.jclass, jCtx C.jobject, jCall C.jobject) C.jobjectArray {
ctx, err := jcontext.GoContext(env, jCtx)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
call, err := GoCall(env, jCall)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
blessingStrs, _ := security.RemoteBlessingNames(ctx, call)
return C.jobjectArray(jutil.JStringArray(env, blessingStrs))
}
//export Java_io_v_v23_security_VSecurity_nativeGetLocalBlessingNames
func Java_io_v_v23_security_VSecurity_nativeGetLocalBlessingNames(env *C.JNIEnv, jVSecurityClass C.jclass, jCtx C.jobject, jCall C.jobject) C.jobjectArray {
ctx, err := jcontext.GoContext(env, jCtx)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
call, err := GoCall(env, jCall)
if err != nil {
jutil.JThrowV(env, err)
return nil
}
blessingStrs := security.LocalBlessingNames(ctx, call)
return C.jobjectArray(jutil.JStringArray(env, blessingStrs))
}