@SuppressWarnings("unchecked")
	public String open(String message,Signature signature){
		//System.out.println("\n---------------Open protocol--------------\n");
		long start = System.currentTimeMillis();
		// Check if the signature is valid
		String result = "";
		try{
			// Check validity
			// Catch the fields
			EllipticCurve ec = new EllipticCurve(new secp256r1());
			ECPoint E0 = new ECPoint(ec,signature.getE0().getx(),signature.getE0().gety());
			ECPoint E1 = new ECPoint(ec,signature.getE1().getx(),signature.getE1().gety());
			ECPoint E2 = new ECPoint(ec,signature.getE2().getx(),signature.getE2().gety());
			// Compute S1 and S2
			ECPoint MinusY1E0 = new ECPoint(ec,E0.multiply(this.osk.gety1()).getx(), E0.multiply(this.osk.gety1()).gety().negate());
			ECPoint MinusY2E0 = new ECPoint(ec,E0.multiply(this.osk.gety2()).getx(), E0.multiply(this.osk.gety2()).gety().negate());
			ECPoint S1 = E1.add(MinusY1E0);
			ECPoint S2 = E2.add(MinusY2E0);
			//System.out.println("S1:\n\tS1x = "+S1.getx()+"\n\tS1y = "+S1.gety());
			//System.out.println("S2:\n\tS2x = "+S2.getx()+"\n\tS2y = "+S2.gety());
			if(S1.getx().equals(S2.getx()) && S1.gety().equals(S2.gety())){
				System.out.println("Opening succesfull!!");
			}
			else{
				System.out.println("Opening failed...");
			}
			// Search pseudo user
			Boolean search = true;
			HashMap<String,Mpk> userList = this.issue.getMembersList();
			Iterator it = userList.keySet().iterator();
			while(it.hasNext() && search){
				String pseudo = (String) it.next();
				Mpk mpk = userList.get(pseudo);
				if(mpk.geth().getx().compareTo(S1.getx()) == 0 && mpk.geth().gety().compareTo(S1.gety()) == 0){
					System.out.println("\nPseudo of the user who signed: "+ pseudo);
					result = pseudo;
					search = false;
				}
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
		long end = System.currentTimeMillis();
		//System.out.println("\nExecution time was "+(end-start)+" ms.");
		//System.out.println("\n---------------DONE--------------");
		return result;
	}