98 lines
1.9 KiB
Go
98 lines
1.9 KiB
Go
//+build android
|
|
//go:generate mkdir -p classes
|
|
//go:generate javac -bootclasspath $ANDROID_HOME/platforms/android-29/android.jar -classpath openpgp-api.jar -d classes PgpConnect.java Foo.java
|
|
//go:generate jar cf PgpConnect.jar -C classes .
|
|
//go:generate rm -rf classes
|
|
|
|
package passgo
|
|
|
|
/*
|
|
#import <jni.h>
|
|
#import "jni_android.h"
|
|
*/
|
|
import "C"
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"path"
|
|
"log"
|
|
"strings"
|
|
"sync"
|
|
"unsafe"
|
|
|
|
"gioui.org/app"
|
|
_ "gioui.org/app/permission/storage"
|
|
//"git.wow.st/gmp/jni"
|
|
)
|
|
|
|
var (
|
|
jvm uintptr
|
|
waitch chan struct{}
|
|
//w *app.Window
|
|
pgp PGP
|
|
installCompleteOnce sync.Once
|
|
)
|
|
|
|
func init() {
|
|
waitch = make(chan struct{})
|
|
}
|
|
|
|
//export Java_st_wow_git_passgo_PgpConnect_installComplete
|
|
func Java_st_wow_git_passgo_PgpConnect_installComplete(env *C.JNIEnv, class C.jclass, p C.jobject) {
|
|
log.Printf("InstallComplete()")
|
|
pgp = PGP(C.NewGlobalRef(env, p))
|
|
installCompleteOnce.Do(func() {
|
|
close(waitch)
|
|
})
|
|
}
|
|
|
|
func InitPgp(view uintptr) {
|
|
log.Printf("InitPgp()")
|
|
jvm = app.JavaVM()
|
|
SetJVM(jvm) // why?
|
|
RunInJVM(func(env *JNIEnv) {
|
|
C.registerFragment(env, (C.jobject)(unsafe.Pointer(view)))
|
|
})
|
|
}
|
|
|
|
func stopPgp() {
|
|
waitch = make(chan struct{})
|
|
}
|
|
|
|
func connect() {
|
|
<-waitch
|
|
}
|
|
|
|
//Clip copies a string to the clipboard
|
|
func Clip(x string) {
|
|
pgp.Clip(x)
|
|
}
|
|
|
|
func (s *Store) nativeDecrypt(name string) (string, error) {
|
|
connect()
|
|
data, err := ioutil.ReadFile(path.Join(s.Dir, strings.Join([]string{name, ".gpg"}, "")))
|
|
if err != nil {
|
|
return "", fmt.Errorf("Error reading file: %s", err)
|
|
}
|
|
ret, err := pgp.Decrypt(string(data))
|
|
return ret, err
|
|
}
|
|
|
|
func (s *Store) nativeEncrypt(pw string) ([]byte, error) {
|
|
connect()
|
|
ret, err := pgp.Encrypt(s.Id, pw)
|
|
return []byte(ret), err
|
|
}
|
|
|
|
func nativeIdentities() ([]string, error) {
|
|
//NOT IMPLEMENTED ON ANDROID
|
|
return []string{}, nil
|
|
log.Printf("nativeIdentities()")
|
|
connect()
|
|
log.Printf("calling pgp.GetId()")
|
|
id, err := pgp.GetId()
|
|
log.Printf("pgp.GetId() returned")
|
|
return []string{id}, err
|
|
}
|