1 /* 2 * Copyright 2016, Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * * Neither the name of Google Inc. nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 package com.google.auth; 33 34 import java.util.Objects; 35 36 /** 37 * Interface for a service account signer. A signer for a service account is capable of signing 38 * bytes using the private key associated with its service account. 39 */ 40 public interface ServiceAccountSigner { 41 42 class SigningException extends RuntimeException { 43 44 private static final long serialVersionUID = -6503954300538947223L; 45 SigningException(String message, Exception cause)46 public SigningException(String message, Exception cause) { 47 super(message, cause); 48 } 49 50 @Override equals(Object obj)51 public boolean equals(Object obj) { 52 if (obj == this) { 53 return true; 54 } 55 if (!(obj instanceof SigningException)) { 56 return false; 57 } 58 SigningException other = (SigningException) obj; 59 return Objects.equals(getCause(), other.getCause()) 60 && Objects.equals(getMessage(), other.getMessage()); 61 } 62 63 @Override hashCode()64 public int hashCode() { 65 return Objects.hash(getMessage(), getCause()); 66 } 67 } 68 69 /** 70 * Returns the service account associated with the signer. 71 * 72 * @return The service account associated with the signer. 73 */ getAccount()74 String getAccount(); 75 76 /** 77 * Signs the provided bytes using the private key associated with the service account. 78 * 79 * @param toSign bytes to sign 80 * @return signed bytes 81 * @throws SigningException if the attempt to sign the provided bytes failed 82 */ sign(byte[] toSign)83 byte[] sign(byte[] toSign); 84 } 85