def _authenticate(self): if self.api.user_id: Core.warn("BUG: _authenticate() called twice") return True data = self._load_token() if data: Core.trace("loaded token: %r", data) if os.environ.get("FORCE_TOKEN_REFRESH"): token_valid = False else: token_valid = data["expires_at"] > time.time() if token_valid: Core.debug("access token within expiry time, using as-is") self.api.user_id = data["user_id"] self.api.access_token = data["access_token"] self.api.refresh_token = data["refresh_token"] return True else: Core.debug("access token has expired, renewing") try: token = self.api.auth(refresh_token=data["refresh_token"]) Core.trace("retrieved token: %r", token) except Exception as e: Core.warn("could not refresh access token: %r", e) #self._forget_token() else: self._store_token(token) return True data = self._load_creds() if data: Core.info("logging in to Pixiv as %r", data["login"]) try: token = self.api.auth(username=data["login"], password=data["password"]) except Exception as e: Core.warn("could not log in using username & password: %r", e) else: self._store_token(token) return True Core.die("could not log in to Pixiv (no credentials)") return False
flags = 0 if agentkey.keyalgo == "ssh-rsa": flags |= SignRequestFlags.RSA_SHA2_256 sigblob = agentkey.sign_data(data, flags) Core.trace("raw signature blob: %r", sigblob) # Show information. keydata = ssh_parse_publickey(agentkey.keyblob) sigdata = ssh_parse_signature(sigblob) Core.trace("parsed publickey blob: %r", keydata) Core.trace("parsed signature blob: %r", sigdata) hash_algo = sigalgo_to_digest[sigdata["algo"]] Core.info("Signed using %s (%s)", hash_algo, sigdata["algo"]) sshsig = SshsigSignature(public_key=agentkey.keyblob, namespace=namespace.encode(), hash_algo=hash_algo.encode(), signature=sigblob) print(sshsig.to_armored().strip()) if args.test_verify: print("verify:", cry_verify_signature(data, keydata, sigdata)) if sigdata["algo"] in {"ssh-rsa", "rsa-sha2-256", "rsa-sha2-512"}: # compatible with OpenSSL; RSASSA-PKCS1-v1_5 is used print("Raw signature:", b64_encode(sigdata["s"])) else: pass #raise ValueError("signatures of %r not supported" % sigdata["algo"])